建造模式是对象的创建模式。它可以将一个产品的内部表象与产品的生成过程分割开来,从而可以是一个建造过程生成具有不同的内部表象的产品对象。
由于建造零件的过程很复杂,因此,这些零件的建造过程往往被“外部化”到另一个乘坐建造者的对象里,建造者对象返还给客户端的是一个全部零件都建造完毕的产品对象。它将产品的结构和建造过程对客户端隐藏起来。
建造模式的四种角色:
抽象建造者(Abstract Builder)角色,给出一个抽象解耦,以规范产品对象的各个组成成分建造。具体建造者类必须实现这个接口锁要求的两种方法:一种是建造方法,另一种是结果返还方法。有多少零件就应该有多少建造方法。
具体建造者(Concrete Builder)角色,担任这个角色的是与应用程序紧密相关的一些类,它们在应用程序调用下创建产品实例。它要完成的任务包括:
A.实现抽象建造者锁声明的接口,给出一步一步地完成创建产品实例的操作;
B.在建造完成之后,提供产品实例。
导演者(Director)角色,调用具体建造者角色以创建产品对象,它与客户端打交道。
产品(Product)角色,它是建造中的复杂对象。
下面以一个发送邮件的系统为例,分析集中角色的关系,它的类图如下:
其中抽象建造者角色是Builder类,它的两个子类GoodbyeBuilder、WelcomeBuilder作为具体建造者,导演角色Director,AutoMessage作为复杂产品的抽象类,它的两个子类GoodbyeMessage,WelcomeMessage作为复杂产品对象。
客户端负责创建导演者和具体建造者对象。
空的零件建造方法:具有不相同数目的零件的产品也可以使用建造模式,如果一些产品零件较少,可以使用空的零件方法来忽略没有的零件。
省略抽象建造者角色:如果可以系统只有一个建造者角色的话,可以省略掉抽象建造者角色。
省略导演角色:在具体建造者角色只有一个的情况下,如果已经省略了抽象产品角色,那么可以进一步省略掉导演者角色。此时导演者类中的产品构造方法由具体产品角色自己实现。
参考文献:《Java与模式》,阎宏,第十九章,建造者模式。