设计模式 (四)创建者模式(Builder)

系统 1392 0

创建者模式主要是为了所谓的高聚合,解耦合,遇到多种配件于一身的情况的时候,放在实体类里面不合适,放在工厂类也不合适,所以就添加了一个创建者类,专门对相应的零件进行组装,如同汽车了N中配件,同时要是各种配件互相联系的话也在这个Builder里面一并做了。

明天准备去爬山,这个原理图就再补上吧:

今天把uml补上了,不过对于uml初学的我就乱乱的先随便画一个吧,等以后慢慢入门了在斟酌里面的错误和细节:

设计模式 (四)创建者模式(Builder)

下面是我自己攒出来的例子(回来的时候着急,把书忘教室了,不知道书上怎么写的,不过明显记得一处错误,构造器也加上了一个void),为了在Builder里面优化一下,用了一下反射,这样就可以直接通过多态来实现对于派生类中的实体类进行初始化并且操作了,简单的实现电脑的组装:通过工厂类实例化Computer的父类指向子类的实例,然后在Builder里面添加一个工厂类的私有变量,通过构造器把要穿件的Computer实例传入Builder,然后对其进行解析,反射得到路径,对其派生类里面的方法进行反射得到相应的配件的集成,转配完成。少说多做:

    package com.designpattern.builder;

public interface Mouse {
	public void add();
}
  

    package com.designpattern.builder;

public interface Monitor {
	public void add();
}

  

    package com.designpattern.builder;

public interface Keyboard {
	public void add();
}

  

    package com.designpattern.builder;

public interface Displayer {
	public void add();
}

  

    package com.designpattern.builder;

public interface Factory {
	public Computer buildComputer();
}

  

    package com.designpattern.builder;

public interface Computer {
	public void add();
}

  

    package com.designpattern.builder;

public class AcerMouse implements Mouse {

	@Override
	public void add() {
		System.out.println("add AcerMouse");
	}

}

  

    package com.designpattern.builder;

public class AcerMonitor implements Monitor {

	@Override
	public void add() {
		System.out.println("add AcerMonitor");
	}

}

  

    package com.designpattern.builder;

public class AcerKeyboard implements Keyboard {

	@Override
	public void add() {
		System.out.println("add AcerKeyboard");
	}

}

  

    package com.designpattern.builder;

public class AcerDisplayer implements Displayer {

	@Override
	public void add() {
		System.out.println("add AcerDisplayer");
	}

}

  

    package com.designpattern.builder;

public class AcerFactory implements Factory {
	
	@Override
	public Computer buildComputer() {
		return new Acer();
	}
}

  

    package com.designpattern.builder;

public class Acer implements Computer {

	@Override
	public void add() {
		System.out.println("builder Acer");
	}

}

  

    package com.designpattern.builder;

import java.lang.reflect.Method;

public class Builder {
	private Factory factory;

	public Builder(Factory factory) {
		this.factory = factory;
	}

	public void builder() throws Exception {
		factory.buildComputer().add();
		String computer = factory.getClass().toString();
		computer = computer.substring(6, computer.length() - 7);

		// build Mouse
		Class c = Class.forName(computer + "Mouse");
		Mouse mouse = (Mouse) c.newInstance();
		Method method = c.getMethod("add", null);
		method.invoke(mouse, null);

		// build Keyboard
		c = Class.forName(computer + "Keyboard");
		Keyboard keyboard = (Keyboard) c.newInstance();
		method = c.getMethod("add", null);
		method.invoke(keyboard, null);

		// build Displayer
		c = Class.forName(computer + "Displayer");
		Displayer displayer = (Displayer) c.newInstance();
		method = c.getMethod("add", null);
		method.invoke(displayer, null);

		// build Monitor
		c = Class.forName(computer + "Monitor");
		Monitor monitor = (Monitor) c.newInstance();
		method = c.getMethod("add", null);
		method.invoke(monitor, null);

		System.out.println("build complete");
	}
}

  

    package com.designpattern.builder;

public class Client {
	public static void main(String[] args) {
		try {
			new Builder(new AcerFactory()).builder();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  


设计模式 (四)创建者模式(Builder)


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论