建造模式是对象的创建模式。
建造模式可以将一个产品的内部表象和产品的生成过程分割开来,
从而可以使一个建造过程生成具有不同的内部表象的产品对象。
不同的产品可以有不同的内部表象,也就是有不同的零件。
有些情况条,一个对象会有一些重要的性质,在它们没有恰当的值之前,对象不能作为一个完整的产品使用。
比如,一个电子邮件发件人地址,收件人地址,主题,内容,附录等部分,在收件人地址得到赋值之前,这个电子邮件不能发出。
有些情况下,一个对象的一些性质必须按照某个顺序赋值才有意义。在某个性质没有赋值之前,另一个性质则无法赋值。
这时候,此对象相当于一个有待建造的产品,而对象的这些性质相当于产品的零件,建造产品的过程是建造零件的过程。
建造模式非常适用于此种情况。
建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,
把对建造过程进行指挥的责任和具体建造者零件的责任分割开来,达到责任划分和封装的目的。
这个模式涉及到四个角色:
源代码
应当注意的是,retrieveProduct() 方法是抽象建造者角色提供的,如果它返还的是 Product1类型或Product2类型的话,
那么ConcreteBuilder2或者Concretebuilder1就会有问题,因为它们应当返还Product1和Product2类型。
解决的方案是为两个具体产品类提供一个共同的接口,形成它们共同的类型。由于建造模式的产品类往往是没有太多关系的一些类,因为,它们不太可能有共同的接口。因此,使用一个标识接口为所有的具体产品类提供一个共同的类型就成为解决问题的方案,即所有的retrieveProduct()都返还Product类型就可以了。
建造模式