第7章 建造者模式
将一个复杂对象的创建和它的表示分离,使得同样的构建过程可以创建不同的表示。
1.模式动机
复杂对象有许多部件,部件组合过程被“外部化”到建造者,建造者返还客户端一个完整产品对象,用户无需关心该对象包含的属性以及它们的组装方式。
2.要点:复杂对象的创建
3.四个角色
客户端 | 指挥者类 | 建造者类(工厂) | 产品类 |
1.针对抽象Builder 2.传入Builder对象 3.控制生产过程 | 1.protected(在子类里也可调用) 2.GetResult方法 | 1.多个属性 2.多个setter、getter |
- 抽象建造者:为创建一个产品对象的各个部件指定抽象接口
- 具体建造者:实现抽象建造者接口,实现各个部件的构造和装配方法,返回创建好的复杂产品对象
- 产品角色:被构建的复杂对象,包含多个组成部件
- 指挥者:安排复杂对象的建造次序,与抽象建造者关联,可在constructor()方法中调用建造者对象的部件构造和装配方法
4.适用环境
- 复杂产品,包含多个成员属性
- 属性相互依赖,需要指定生成顺序
- 对象创建过程独立于创建该对象的类
- 隔离创建和使用,使相同的创建过程可以创建不同类型产品
5.优点
- 创建与使用分离
- 具体建造者独立,可增加或修改
- 精细控制产品创建过程,钩子方法(boolean isXXX())
- 符合“开闭原则”
6.缺点
- 建造者模式的产品组成部分相似,如果产品差异大不适用
- 如果产品内部变化复杂,需要定义很多具体建造者,使系统变得很庞大
7.模式扩展
- 模式简化:只需一个具体建造者,可省略抽象建造者和指挥者
- 比较:建造者模式返回组装好的完整产品(组装厂商),抽象工厂模式返回一系列相关产品(配件生产商)