设计模式学习笔记(五):建造者模式【Builder Pattern】(三)问题引申
2014-06-30 14:51
731 查看
接着上面的分析。假如有这么个需求,这四个过程(start ,stop ,alarm ,engineBoom)按照排列组合有很多种,那我们怎么满足这种需求呢?也就是要有个类来安排这几种方法组合,就像导演安排演员一样,哪个先出场哪个后出场,哪个不出场。我们叫该类叫做导演类Director。
增加了Director 类,这个类做了层封装,类中方法说明如下:
A 型号的奔驰车辆模型是只有启动(start)、停止(stop)方法,其他的引擎声音、喇叭都没有;
B 型号的奔驰车是先发动引擎(engine boom),然后启动(star),再然后停车(stop),没有喇叭;
C 型号的宝马车是先喇叭叫一下(alarm),然后(start),再然后是停车(stop),引擎不轰鸣;
D 型号的宝马车就一个启动(start),然后一路跑到黑,永动机,没有停止方法,没有喇叭,没有引擎轰鸣;
E 型号、F 型号…等等,可以有很多,启动(start)、停止(stop)、喇叭(alarm)、引擎轰鸣(engine boom)这四个方法在这个类中可以随意的自由组合,有几种呢?好像是排列组合,这个不会算,高中数学没学好,反正有很多种了,这里都可以实现。
看下导演类代码实现,Director.java如下:
然后Client 程序就只与Director 类打交道了。假如要生产A类型奔驰车1W辆,B类的奔驰车100W辆,C类的宝马车1000W辆,D类型的我不要:
通过这样写完的程序简单明了,自己能看懂,别人也能看懂。
建造者模式总结:
Client 在具体应用中就是其他的模块或者页面;
CarModel以及两个实现类 BenzModel 和 BMWModel 叫做产品类(Product Class),这个产品类实现类模板方法模式;
CarBuilder以及两个实现类 BenzBuilder 和 BMWBuilder 叫做建造者类(Builder Class);
Director叫做导演类(Director Class),负责安排已有模块的顺序,然后告诉Builder开始建造。
建造者模式与工厂方法模式的区别:
建造者模式最主要功能是基本方法的调用顺序安排,也就是这些基本方法已经实现类;而工厂方法则重点是创建,你要什么对象为创造一个对象出来,组装顺序则不是他关心的。
程序代码:建造者模式【Builder Pattern】(三)
增加了Director 类,这个类做了层封装,类中方法说明如下:
A 型号的奔驰车辆模型是只有启动(start)、停止(stop)方法,其他的引擎声音、喇叭都没有;
B 型号的奔驰车是先发动引擎(engine boom),然后启动(star),再然后停车(stop),没有喇叭;
C 型号的宝马车是先喇叭叫一下(alarm),然后(start),再然后是停车(stop),引擎不轰鸣;
D 型号的宝马车就一个启动(start),然后一路跑到黑,永动机,没有停止方法,没有喇叭,没有引擎轰鸣;
E 型号、F 型号…等等,可以有很多,启动(start)、停止(stop)、喇叭(alarm)、引擎轰鸣(engine boom)这四个方法在这个类中可以随意的自由组合,有几种呢?好像是排列组合,这个不会算,高中数学没学好,反正有很多种了,这里都可以实现。
看下导演类代码实现,Director.java如下:
package com.example; import java.util.ArrayList; public class Director { private ArrayList<String> sequence = new ArrayList<String>(); private BenzBuilder benzBuilder = new BenzBuilder(); private BMWBuilder bmwBuilder =new BMWBuilder(); public BenzModel getABenzModel(){ this.sequence.clear(); sequence.add("start"); sequence.add("stop"); benzBuilder.setSequence(sequence); return (BenzModel)benzBuilder.getCarModel(); } public BenzModel getBBenzModel(){ this.sequence.clear(); sequence.add("engineboom"); sequence.add("start"); sequence.add("stop"); benzBuilder.setSequence(sequence); return (BenzModel)benzBuilder.getCarModel(); } public BMWModel getCBmwModel(){ this.sequence.clear(); sequence.add("alarm"); sequence.add("start"); sequence.add("stop"); bmwBuilder.setSequence(sequence); return (BMWModel)bmwBuilder.getCarModel(); } public BMWModel getDBmwModel(){ this.sequence.clear(); sequence.add("start"); bmwBuilder.setSequence(sequence); return (BMWModel)bmwBuilder.getCarModel(); } }
然后Client 程序就只与Director 类打交道了。假如要生产A类型奔驰车1W辆,B类的奔驰车100W辆,C类的宝马车1000W辆,D类型的我不要:
package com.example; public class Client { public static void main(String[] args) { Director director = new Director(); //1W辆的A类型奔驰车 for(int i=0; i<10000; i++){ director.getABenzModel().run(); } //100W辆B类型的奔驰车 for(int i=0;i<1000000;i++){ director.getBBenzModel().run(); } //1000W量C类型的宝马车 for(int i=0;i<10000000;i++){ director.getCBmwModel().run(); } } }
通过这样写完的程序简单明了,自己能看懂,别人也能看懂。
建造者模式总结:
Client 在具体应用中就是其他的模块或者页面;
CarModel以及两个实现类 BenzModel 和 BMWModel 叫做产品类(Product Class),这个产品类实现类模板方法模式;
CarBuilder以及两个实现类 BenzBuilder 和 BMWBuilder 叫做建造者类(Builder Class);
Director叫做导演类(Director Class),负责安排已有模块的顺序,然后告诉Builder开始建造。
建造者模式与工厂方法模式的区别:
建造者模式最主要功能是基本方法的调用顺序安排,也就是这些基本方法已经实现类;而工厂方法则重点是创建,你要什么对象为创造一个对象出来,组装顺序则不是他关心的。
程序代码:建造者模式【Builder Pattern】(三)
相关文章推荐
- 设计模式学习笔记(五):建造者模式【Builder Pattern】(一)问题提出
- 设计模式学习笔记(五):建造者模式【Builder Pattern】(二)问题改进
- .Net设计模式学习笔记(四):建造者模式(Builder Pattern)
- 设计模式学习笔记八:建造者模式(Builder Pattern)
- 设计模式学习笔记八:建造者模式(Builder Pattern)
- 设计模式笔记17:建造者模式(Builder Pattern)
- 设计模式学习笔记(三):模板方法模式【Template Method】(三) 问题引申
- 设计模式笔记17:建造者模式(Builder Pattern)
- 设计模式学习笔记——建造者(Builder)模式
- 设计模式学习笔记——建造者模式(Builder Pattern)
- 设计模式笔记——(二:建造者模式 Builder Pattern)
- 设计模式学习笔记(十二)—Builder建造者模式
- 设计模式之Builder 的学习笔记
- 设计模式学习笔记--Observer Pattern观察者模式
- 设计模式学习笔记(3)——适配器模式(Adapter Pattern)
- Net设计模式实例之建造者模式(Builder Pattern)
- 设计模式学习笔记(2)——装饰模式(Decorator Pattern)
- Net设计模式实例之建造者模式(Builder Pattern)(2)
- java设计模式学习4--Builder Pattern[原创]
- 学习设计模式之生成器(Builder Pattern)模式