1.4建造者模式(BuilderPattern)
定义:
Separatetheconstructionofacomplexobjectfromitsrepresentationsothat
thesameconstructionprocesscancreatedifferentrepresentations.将一个复杂对象的
构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式的通用类图:
建造者模式将一个复杂对象的生成责任作了很好的分配。它把构造过程放在指挥者的方法中,把装配过程放到
具体建造者类中。建造者模式的产品之间都有共通点,但有时候,产品之间的差异性很大,这就需要借助工厂
方法模式或抽象工厂模式。另外,如果产品的内部变化复杂,Builder的每一个子类都需要对应到不同的产品
去做构建的动作、方法,这就需要定义很多个具体建造类来实现这种变化。
模式的要素:
1)Product产品类:通常是实现了模板方法模式,也就是有模板方法和基本方法,这个参考上一章节的模
板方法模式。在例子中,BenzModel和BMWModel就属于产品类。
2)Builder抽象建造者:规范产品的组建,一般是由子类实现。在例子中,CarBuilder属于抽象建造者。
3)ConcreteBuilder具体建造者:实现抽象类定义的所有方法,并且返回一个组件好的对象。在例子中,
BenzBuilder和BMWBuilder就属于具体建造者。
4)Director导演:负责安排已有模块的顺序,然后告诉Builder开始建造,在上面的例子中就是我们的老
大,牛叉公司找到老大,说我要这个,这个,那个类型的车辆模型,然后老大就把命令传递给我,我和我的团
队就开始拼命的建造,于是一个项目建设完毕了。
模式的优点:
1)封装性。使用建造者模式可以使客户端不必知道产品内部组成的细节,如例子中我们就不需要关心每一
个具体的模型内部是如何实现的,产生的对象类型就是CarModel。
2)建造者独立,容易扩展。
3)便于控制细节风险。由于具体的建造者是独立的,因此可以对建造过程逐步细化,而不对其他的模块产
生任何影响。
模式的缺点:
建造者模式的“加工工艺”是暴露的,这样使得建造者模式更加灵活,也使得工艺变得对客户不透明。
适用场景:
1)相同的方法,不同的执行顺序,产生不同的事件结果时,可以采用建造者模式。
2)多个部件或零件,都可以装配到一个对象中,但是产生的运行结果又不相同时,则可以使用该模式。
3)产品类非常复杂,或者产品类中的调用顺序不同产生了不同的效能,这个时候使用建造者模式是非常合