BUILDER (生成器)---对象创建型模式
1、意图(intent)
将一个复杂对象的构建与其表示相分离,使得相同的构建过程可以创建不同的表示。也就是说规划一个生命周期的概念。
2、动机(motivation)
通常会面对一个复杂的对象的创建,其通常是由若干个相对独立的子对象组合而成。如果这个复杂对象内的各个部分发生着剧烈的变化,但是将它们组合在一起的算法却是稳定的。如何提供一种封装机制,隔离出复杂对象内剧烈变化的对象,从而使构建算法不随需求的改变而改变。Builder模式把分析当前状态和要进行何种转换的类与怎样创建和表示转换后格式的类分开。也就是要有一个导向器负责要去做什么,一个生成器负责具体的实例化工作。
BUILDER模式主要用于分步骤地构建一个复杂的对象。在这其中分步骤是一个稳定的算法,而复杂对象的各个部分则经常变化。
3、适用性
l 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
l 当构造过程必须允许被构造的对象有不同的表示时。
4、结构:
5、参与者
Builder:生成器,为创建一个Product对象的各个部件指定一个抽象接口。
ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件。
定义并明确它所创建的表示。
提供一个检索产品的接口(如GetResult1)。
Director:导向器,构造一个使用Builder接口的对象。
Product:表示由各个部件构成的复杂对象。
6、协作
客户创建Director对象,并用它所想要的Builder对象进行配置。
一旦产品部件被生成,导向器就会通知生成器。
生成器处理导向器的请求,并将部件添加到该产品中。
客户从生成器中检索产品。
7、效果
l 可以改变一个产品的内部表示。Builder对象提供给导向器一个构造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表示和内部结构。因为产品是通过抽象接口构造的,你在改变该产品的内部表示时所要做的只是定义一个新的生成器。Builder模式与一下子
l 它将构造代码和表示代码分离。
l 使你可以对构造过程进行更加精细的控制。Builder模式与一下子就生成产品的的创建型模式不同,它是在导向者的控制下一步一步的构造产品的。仅当该产品完成时导向者才从生产者中取回它。因此Builder接口相比其他创建型模式能更好的反映产品的构造过程。通过精细的控制构建过程,从而能更精细的控制所得产品的内部结构。
8、实现
通常有一个抽象的Builder类为导向者可能要求创建的每一个构件定义一个操作。这些操作什么也不做,一个ConcreteBuilder类对它们有兴趣创建的构件重定义这些操作。需要注意三点,一、装配和构造接口,生成器逐步构成他们的产品,这就需要Builder类提供足够的接口。二、所生成的产品没有抽象类。三、在Builder中缺省方法为空。