建造者模式可以将一个产品的内部实现和它的构造过程分割开来,从而可以将复杂对象的构建过程外部简单化的目的。
为什么要用这个模式
有些产品结构比较复杂,构成产品的零件有许多个,这许多个零件又没有什么关系,并且这些零件的组合是有必须的顺序的,比如说组装汽车(我不懂如何组装汽车哈,瞎说举例而已):要先制作好底座,然后在底座上安装发动机,安装电路油路,安装座椅,然后安装车皮,安装轮子,最后安装车门。其中底座、发动机、电路油路、座椅这些都是零件(对软件来讲就是模块就是类)。这些零件要组合成汽车需要一个复杂的过程,需要一个专门的建造者来管理这些建造步骤,建造者一般只负责管理上述几个步骤(做底座、装发动机等)的具体实施,步骤之间的顺序和协调一般还需要有专门的设计师来进行指导,这就是指导者角色;而由于上述零件可以用于多种产品的制造,而其他产品的设计师和建造者会有不同的制造顺序和建造工艺,所以还需要将建造者和指导者角色抽象出来,基于以上考虑,建造者模式应运而生。
综上,在以下情况下使用建造者模式:
1. 有许多的零件类要通过一种必须的顺序构成一个产品类,就应该使用建造者模式,这时可以有也可以没有指导者角色
2. 如果这些零件要组成的产品类不止一个,需要指导者角色
3. 如果产品类不止一类,则需要抽象指导者角色,构造多个指导者角色的实体类
模式图解
从设计模式书中直接拿过来的图解,讲的很明白。
Director即指导者,Builder即建造者,Product即产品。其中Director根据不同的产品对不同的Builder顺序下达指令,Builder内部按照Director指令进行Product的建造。