常用网站架构/廊坊网站建设公司
建造者模式是创建性模式的一种,主要使用场景是创建一些相似且复杂的对象。比如各种型号的手机,都是由cpu,内存,屏幕,主板等部分构成的,各个组成部分相似,但每个部分又是比较复杂的。
为了组装一台任意型号的手机,采用建造者模式是不错的,用户无需关注你是怎么构建手机的,只要拓展一个该型号手机的建造器,并由手机组装的统一指挥员指挥即可。看一下类图:
由类图可以看出,Builder接口定义了需要构造哪些东西,产品生产是靠具体的构造器(ConcreteBuilder)的,指挥类(Director)可以对多个builder进行指挥。当需要新增一种产品的时候,只要新增一个具体的构造器(ConcreteBuilder)就可以了。
手机组装的代码实例:
定义手机类:
//定义一个手机类,假设手机由cpu和memory组成
public class Phone {private String cpu;private String memory;//getter & setter & toString
}
定义构造器接口,每个实例构造器都要实现该类
public interface PhoneBuilder {/*** 建造者模式适用于复杂对象的创建和使用,且差异性较小,或很多参数有默认值,这样也可以用抽象类代替接口*/void buildCpu();void buildMemory();Phone getPhone();
}
定义一个指挥类,对上面的PhoneBuilder接口中的方法进行指挥
public class PhoneDirector {//这里比较简单,指挥类还可以同时指挥其他builderprivate PhoneBuilder phoneBuilder;public PhoneDirector() {}public PhoneDirector(PhoneBuilder phoneBuilder) {this.phoneBuilder = phoneBuilder;}//同样的构建过程public void construct() {phoneBuilder.buildCpu();phoneBuilder.buildMemory();}public void showPhone() {System.out.println(phoneBuilder.getPhone());}
}
最后就是对接口中的建造细节进行实现了,定义了华为和小米手机:
public class HuaWeiBuilder implements PhoneBuilder {private Phone phone = new Phone();@Overridepublic void buildCpu() {//封装复杂的构建过程phone.setCpu("HuaWeiCpu");}@Overridepublic void buildMemory() {//封装复杂的构建过程phone.setMemory("HuaWeiMemory");}public Phone getPhone() {return phone;}
}
public class XiaoMiBuilder implements PhoneBuilder {private Phone phone = new Phone();@Overridepublic void buildCpu() {phone.setCpu("XiaoMiCpu");}@Overridepublic void buildMemory() {phone.setMemory("XiaomiMemory");}public Phone getPhone() {return phone;}
}
使用的时候只要将具体的构造器交给指挥员指挥就行了
public class Main {public static void main(String[] args) {//将具体的建造器交给指挥员指挥PhoneDirector huaWeiPhoneDirector = new PhoneDirector(new HuaWeiBuilder());huaWeiPhoneDirector.construct();huaWeiPhoneDirector.showPhone();PhoneDirector XiaoMiPhoneDirector = new PhoneDirector(new XiaoMiBuilder());XiaoMiPhoneDirector.construct();XiaoMiPhoneDirector.showPhone();}
}
好,新鲜的华为和小米出炉了!