设计模式(4)--Builder 建造者(构建器)
来源:互联网 发布:拍电影特效软件 编辑:程序博客网 时间:2024/04/28 01:20
Builder和工厂模式一样,都是创建对象类型的模式。同样是创建类型的模式,其区别在于:Builder是应用于更为复杂的对象创建过程。举例说明:生产一辆玩具车,一个工厂一个方法就搞定了。而要生产一辆汽车,那部件太多了,部件不能少,且把所有这些部件组装在一起,也要有一套非常繁琐的流程和顺序。
这个时候,工厂模式中的工厂接口,就不是只写一个创建产品的抽象方法就够了。你必须考虑到使这个接口里具备一系列必不可少的方法,有了这些方法才能够满足生成完整产品的需要。而工厂实现类,必须实现接口中的一部分相关联的方法,才能创造出完整的产品(这一步很关键,工厂接口不能遗漏部件,要做到最普遍意义上的抽象,因为调用工厂时只使用接口类型去调用其中的方法。这在大话设计模式里,有一个很赞的说法:依赖倒转原则–抽象不应该依赖于细节,细节应该依赖于抽象)。同时,你还应该考虑创建一个类,专门来控制繁琐的流程,合理的调用工厂实现类中一系列方法生产出来的部件,拼出最终的产品。这就是Builder模式。
从这个意义上说,也不用太去纠结工厂和Builder的区别,还是那句话,理解精髓,使用时就水到渠成。如果你遇到复杂对象的创建,觉得应该封装,那就使用工厂。如果你发现对象极其复杂,那你就会觉得合理的方式是把每个部件的创建封装,并且应该制定规范保证不会遗漏部件。最后还需要一个总控类来负责完整产品的装配,你就自然的在使用Builder模式了。
Builder模式的要点:
1.上面所说的总控类,即Director,称之为导演类。导演类负责调用Builder提供的各类方法来完成最终的产品。
2.Builder,类似于工厂接口,称之为抽象建造者。这里是实现细节依赖抽象的核心。所有的Builder实现类,都必须实现Builder抽象出的一部分相关联的方法。才能实现完整的产品创建能力。
3.建造者,即Builder的实现类。相当于工厂模式的工厂实现类。同样是一种产品需要一个建造者。但要注意的是:
a.不同的产品可能要用各自不同的一系列方法去创建。很多例子里并没有强调这一点,但是GoF的举例中确实是有一个子类并没有实现全部Builder中的方法。
b.正因为a,所以Builder中未必都是抽象方法需要ConcretBuilder去实现,而也有可能是空方法,只有需要用到的那个ConcretBuilder去重写,但这依然是抽象的思维方式。
4.产品类,注意到产品并没有抽象成接口,这也不是定死的。因为在建造者模式中,很可能不同的产品实现根本就没有抽象出共性接口的可能。
至此总结一下:Builder模式就像是一个导演类,后面挂着一个工厂模式。当然这里的工厂很可能有一大堆创建方法,由导演类来负责总控和装配,从而实现对象的创建。所以,这是一个复杂对象适用的创建模式。
- 设计模式(4)--Builder 建造者(构建器)
- 设计模式之建造者模式(Builder)以及构建器
- [设计模式]建造者模式(Builder)
- 设计模式--建造者模式(Builder)
- 设计模式Builder(建造者)模式
- 设计模式 - 建造者模式(Builder)
- 设计模式:建造者模式(Builder)
- 设计模式-建造者模式(Builder)
- 设计模式:建造者模式(Builder)
- 设计模式:建造者模式(Builder)
- 设计模式:建造者模式(Builder)
- [设计模式]建造者模式(Builder)
- 设计模式 ---建造者模式(Builder)
- (4)Java设计模式-建造者模式(Builder)
- 【4】设计模式之建造者模式(Builder)
- java设计模式4--建造者模式(Builder)
- 设计模式(4)-建造者模式(Builder)
- JAVA设计模式:建造者(Builder)
- c++ vector用法
- 【Mapreduce】从代码上解决Output directory already exists错误,避免每次调试都要手动删除输出文件夹
- 实现对象的复用——享元模式(一):享元模式概述(上)
- LBP特征
- uva10986Sending email (SPFA)
- 设计模式(4)--Builder 建造者(构建器)
- MFC操作ini文件方法
- 石头剪刀布
- qml的states属性
- 今天做了freemaker 导出word文档 的bug修复,解决 \n换行 问题
- Maven学习一:用Maven创建Java Project
- GoogleAPI-Adwords-Bid Landscapes
- AMD小记
- SSH服务恶意代码分析