设计模式篇之建造者模式

本文是针对设计模式的建造者模式学习笔记。

建造者模式(Builder Pattern)

定义

将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。属于创建型模式。

code
抽象建造者,具体建造者,产品,指挥者。

  • Builder是为创建一个Product对象的各个部件指定的抽象接口。
  • ConcreteBuilder实现Builder的具体接口,构造和装配各个部件。
  • Product即建造出来的产品角色。
  • Director是构建一个使用Builder接口的对象。

特点

优点

  • 客户端不必知道产品内部组成的细节,将产品本身与产品创建过程解耦,使得相同过程可以创建不同的对象,如生成一个游戏人物。
  • 每个具体建造者相对独立,而与其它具体建造者无关,可以方便的替换具体建造者或增加新的建造者,无需修改原有类库代码,符合开闭原则。
  • 加入钩子方法可以精细控制生产的产品。
    缺点
  • 产品共同点多,产品差异性大或者说产品共同部分少时不宜用建造者模式。
  • 产品内部变化复杂,需要具体建造者过多会增加系统复杂度。

总结

建造者模式主要用于创建“一个复杂的对象”,这些对象内部构建间的建造顺序或者说组合在一起的算法相对稳定,但复杂对象的各个内部面临着复杂的变化,此时考虑建造者模式。AlertDialog的创建就适用了Builder模式,以内部类AlertDialog.Builder将Builder,ConcreteBuilder,Director三个模块合并,简化了建造者模式的设计。

适用场景

  • 产品对象有多个部分组成,通常包含多个成员属性。
  • 产品对象的各个部分需要指定生成顺序。
  • 创建过程相同,需要创建不同的产品。