第13章 好菜没回味不同——建造者模式
定义
建造者模式将复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。也叫生成器模式。
主要用于创建复杂对象(如:人),对象内部构件间构建次序稳定(如:有头、四肢、躯干),但构建的构建过程复杂多变(如:胖、瘦、高、矮)。
实现
- 指挥类Director: 按照特定的流程调用抽象建造者类(Builder)的接口(BuilderPartxx()),实现特定流程的组装;
- 抽象建造者类Builder: 抽象不同的构建流程函数,抽象了通用的流程函数(BuilderPartxx()),不是通用的流程不要写在这里;
- 具体建造者类ConcreteBuilder: 用不同部件/方式实现抽象建造者类的流程函数(BuilderPartxx()),并且通过结果函数(getResult())返回构建完成的产品(Product类)
- 产品Product: 包含各种部件的构建成功的产品。
- 客户端(Client): 调用指挥类(Director)的接口(Constructor())进行产品构建,调用具体建造者类接口(getResult())返回产品(Product);
建造者模式类图实现:
建造者模式使用方式:
总结
挺好的一个设计模式,
适用场景:创建复杂对象的算法独立于对象的组成部分以及它们的装配方式
- 好处:指挥类提供了统一的建造接口给客户,抽象建造者隐藏了产品如何组装,如果创建新的产品只需创建新的建造者类即可。
- 这样实现了将构建与表示分离,同样的产品、用共用同样的构建流程(如肯德基味道一致),避免流程遗漏等造成同样产品不同的效果(如人工炒菜同样菜味道可能不一样)。