结论
只要提前写好模板,不管调用几次都是由builder来new对象,就不需要手动组装了
非建造者模式
在于每种场景类都需要自己new,虽然都能够按照需求适配,但是每一种需求就会占用一个sequence序列
建造者模式
将new的工作交给程序,只需要固定写好每种适配规则(sequence),相当于写好模板,交给builder类统一创建与管理,进而将所有builder交给Director管理。
案例
Director
管理builder与构造实例的模板
public class Director {
private List<String> sequence = new ArrayList<>();
private BenzBuilder benzBuilder = new BenzBuilder();
private BMWBuilder bmwBuilder = new BMWBuilder();
/**
* A类型奔驰车模型,start -> stop
*/
public BenzModel getABenzModel(){
sequence.clear();
sequence.add("start");
sequence.add("stop");
benzBuilder.setSequence(sequence);
return (BenzModel) benzBuilder.getCarModel();
}
/**
* B类型奔驰车模型,engine boom -> start -> stop
*/
public BenzModel getBBenzModel(){
sequence.clear();
sequence.add("engine boom");
sequence.add("start");
sequence.add("stop");
benzBuilder.setSequence(sequence);
return (BenzModel) benzBuilder.getCarModel();
}
/**
* C类型宝马车模型,alarm -> start -> stop
*/
public BMWModel getCBMWModel(){
sequence.clear();
sequence.add("engine boom");
sequence.add("start");
sequence.add("stop");
bmwBuilder.setSequence(sequence);
return (BMWModel) bmwBuilder.getCarModel();
}
/**
*
* D类型宝马车模型,《希望の花》,团长名言:“不要停下来啊”
*/
public BMWModel getDBMWModel(){
sequence.clear();
sequence.add("start");
bmwBuilder.setSequence(sequence);
return (BMWModel) bmwBuilder.getCarModel();
}
}
Director入口类
public class DirectorMain {
public static void main(String[] args) {
Director director = new Director();
director.getABenzModel().run();
director.getBBenzModel().run();
director.getCBMWModel().run();
director.getDBMWModel().run();
}
}
参考书籍
秦小波《设计模式之禅》