建造者模式(Builder Pattern)
定义
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。属于创建型模式。
code
抽象建造者,具体建造者,产品,指挥者。
- Builder是为创建一个Product对象的各个部件指定的抽象接口。
- ConcreteBuilder实现Builder的具体接口,构造和装配各个部件。
- Product即建造出来的产品角色。
- Director是构建一个使用Builder接口的对象。
特点
优点
- 客户端不必知道产品内部组成的细节,将产品本身与产品创建过程解耦,使得相同过程可以创建不同的对象,如生成一个游戏人物。
- 每个具体建造者相对独立,而与其它具体建造者无关,可以方便的替换具体建造者或增加新的建造者,无需修改原有类库代码,符合开闭原则。
- 加入钩子方法可以精细控制生产的产品。
缺点 - 产品共同点多,产品差异性大或者说产品共同部分少时不宜用建造者模式。
- 产品内部变化复杂,需要具体建造者过多会增加系统复杂度。
总结
建造者模式主要用于创建“一个复杂的对象”,这些对象内部构建间的建造顺序或者说组合在一起的算法相对稳定,但复杂对象的各个内部面临着复杂的变化,此时考虑建造者模式。AlertDialog的创建就适用了Builder模式,以内部类AlertDialog.Builder将Builder,ConcreteBuilder,Director三个模块合并,简化了建造者模式的设计。
适用场景
- 产品对象有多个部分组成,通常包含多个成员属性。
- 产品对象的各个部分需要指定生成顺序。
- 创建过程相同,需要创建不同的产品。