1. 一个产品常有不同的组成成分作为产品的零件,这些零件有可能是对象,也有可能不是对象,它们通常又叫做产品的内部表象(internal representation)。使用建造者模式可以使客户端不需要知道所生成的产品对象有哪些零件,每个产品的对应零件彼此有何不同,是怎么建造出来的以及怎样组成产品的。
2. 建造者模式的简略类图如下:
3. 有些情况下一个对象会有一些重要的性质(零件),在它们没有恰当的值之前,对象不能作为一个完整的产品使用。而另一些情况下,一个对象的一些性质(零件)必须按照某个顺序赋值才有意义。所以当产品的零件建造涉及到复杂的商业逻辑的情况下,这些零件的建造过程往往被“外部化”到另外一个称做建造者的对象里,建造者对象返还给客户端的是一个全部零件都建造完毕的产品对象。
4. 建造者模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的产品对象。建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造零件的责任分割开来,达到责任划分的目的。
5. 建造者模式的类图如下:
a) 抽象建造者(Builder)角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。一般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者(Concrete Builder)角色。具体建造者类必须实现这个接口所要求的两种方法:一种是建造方法,比如buildPart1(), buildPart2()等等。另一种是结果返还方法,如retrieveResult()。一般来说,产品所包含的零件数目与建造方法的数目相符。
b) 具体建造者(Concrete Builder)角色:担任这个角色的是应用程序紧密相关的一些类,它们在应用程序调用下创建产品的实例。这个角色要完成的任务包括:实现抽象建造者Builder所声明的接口,给出一步一步地完成创建产品实例的操作以及在建造过程完成后,提供产品的实例。
c) 导演者(Director)角色:担任这个角色的类调用具体建造者角色以创建产品对象。导演角色并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者角色。导演者只知道产品类各零件的构建顺序。
d) 产品(Product)角色:产品便是建造中的复杂对象。一般来说,一个系统中会有多于一个的产品类,而且这些产品类并不一定有共同的接口,而完全可以是不相关联的。
6. 导演者角色是与客户端打交道的角色。导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但是却不为客户端所知。一般来说,每有一个产品类,就有一个相应的具体建造者类。这些产品应当有一样数目的零件,而每有一个零件就相应地在所有的建造者角色里有一个建造方法。
7. 客户端使用建造者模式的顺序图如下:
把创建具体建造者对象的任务交给客户端而不是导演者对象,是为了将导演者对象与具体建造者对象的耦合变成动态的,从而使导演者对象可以操纵数个具体建造者对象中的任何一个。
8. 当系统中有两个以上的具体产品类时,可以为这些具体产品类定义一个共同的接口(可以是空接口,如果产品类间没有共性的话。)。而抽象构造者Builder类的retrieveResult()方法应该返回这个共同的抽象产品接口。如果具体产品类是第三方提供的,不能修改,那只好将retrieveResult()方法从抽象建造者中去掉,而不同产品的具体建造者的retrieveResult()方法返回不同的具体产品类。如果不同产品所具有的零件数不同,那么抽象建造者的零件构造方法的个数应该与具有最多零件的产品的零件数一致,而具有较少零件的产品的具体建造者可以使用空的零件建造方法。
9. 如果设计师非常肯定系统只需要一个具体建造者角色的话,可以省略掉抽象建造者角色和导演者角色:
在这种情况下,就如同模版方法(Template Method)模式,construct()方法就是模版方法。
10. 在以下情况下应当使用建造者模式:
a) 需要生成的产品对象有复杂的内部结构。
b) 需要生成的产品对象的属性相互依赖。建造者模式可以强制实行一种分步骤进行的建造过程。
c) 产品的某些关键属性没有确定之前,产品对象不能使用。这时产品对象的实例化,属性的赋值和使用仍然是分步骤进行的。
d) 在对象创建过程中会使用到系统中的其他一些对象,这些对象在产品对象的创建过程中不易得到。
11. 建造者模式主要有以下效果:
a) 使得产品的内部表象可以独立地变化。客户端不必知道产品内部组成的细节。
b) 每一个Builder都相对独立,而与其他的Builder无关。
c) 模式所建造的最终产品更易于控制。
12. 在抽象工厂模式中,每一次工厂对象被调用时都会返还一个完整的产品对象,而客户端有可能会决定把这些产品组装成一个更大更复杂的产品。建造者则不同,它一点一点地建造出一个复杂的产品,而这个产品的组装过程就发生在建造者角色内部。建造者模式的客户端拿到的是一个完整的最后产品。换言之,抽象工厂模式处在更加具体的尺度上,而建造者模式则处于更加宏观的尺度上。一个系统可以由一个建造者模式和一个抽象工厂模式组成,客户端通过调用这个建造者,间接地调用另一个抽象工厂模式的工厂角色。工厂模式返还不同产品族的零件,而建造者模式则把它们组装起来。
相关推荐
第6章 建造者模式(Builder) 6.1 模式解说 6.2 结构和用法 6.2.1 模式结构 6.2.2 代码模板 6.3 范例与实践 6.3.1 一个数据集对象产品的建造者模式 6.3.2 范例小结 第7章 单例模式(Singleton) 7.1 模式...
第6章 建造者模式(Builder) 6.1 模式解说 6.2 结构和用法 6.2.1 模式结构 6.2.2 代码模板 6.3 范例与实践 6.3.1 一个数据集对象产品的建造者模式 6.3.2 范例小结 第7章 单例模式(Singleton) ...
建造者模式(Builder) 4. 工厂方法模式(Factory Method) 5. 原型模式(Prototype)结构型: 6. 适配器模式(Adapter Pattern) 7. 桥接模式(Bridge Pattern) 8. 装饰模式(Decorator Pattern) 9. 组合模式(Composite ...
《Java与模式》系列教程是深入理解Java编程和设计模式的重要资源,这部分涵盖了第十九到第二十一章的内容。在Java编程中,设计模式是解决常见问题的成熟解决方案,它们是经验丰富的开发者的智慧结晶,可以帮助我们写...
三、建造者模式(Builder) 建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在C#中,可以使用接口定义建造者,然后由具体的建造者类实现,以构建不同类型的复杂对象。 四、代理...
#### 第10章 建造者模式(Builder Pattern) 建造者模式是一种创建型设计模式,它能够逐步构建一个复杂的对象。 ##### 描述 建造者模式允许分步骤构建复杂的对象,这对于构造具有多个可选部分的对象非常有用。 ##...
第3章 创建型模式 54 3.1 Abstract Factory(抽象工厂)— 对象创建型模式 57 3.2 Builder(生成器)—对象创建型 模式 63 3.3 Factory Method(工厂方法)— 对象创建型模式 70 3.4 Prototype(原型)—对象创建型 ...
#### 二、建造者模式(Builder) **定义:** 建造者模式是一种创建型设计模式,允许逐步构建复杂对象。该模式允许用户只通过指定复杂对象的类型和内容就可以构建它们,而不需要知道内部的具体构建细节。 **应用...
C#中的Builder模式常用于构建复杂的对象,例如邮件消息或数据库连接字符串。 五、装饰器模式 装饰器模式允许动态地给一个对象添加新的行为或责任,而无需修改其原有代码。在C#中,通过实现与被装饰对象相同的接口,...
四、建造者模式(Builder) 建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在PHP中,它常用于构建复杂对象,如XML文档、数据库记录等,使得构造过程更易于管理和测试。 五、原型...
#### 第10章:建造者模式【BUILDER PATTERN】 **定义与作用:** 建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 **实现原理:** - 创建一个产品类,用于存放最终的复杂...
3.4BuilderPattern(建造者模式) 58 3.4.1定义 58 3.4.2现实例子——快餐店 60 3.4.3C#实例——车间造车 61 3.4.4Java实例——建造房屋 65 3.4.5优势和缺陷 69 3.4.6应用情景 70 3.5PrototypePattern(原型...
四、建造者模式(Builder) 建造者模式将复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。在Java中,如SQL语句构建、XML文档构建等场景,建造者模式能有效组织代码结构。 五、原型模式...
建造者(Builder)模式 - **定义**:将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示。 - **结构**:包含产品类、抽象建造者、具体建造者和指挥者。 - **优点**:可以创建复杂对象的不同...
第3章 创建型模式 54 3.1 abstract factory(抽象工厂)— 对象创建型模式 57 3.2 builder(生成器)—对象创建型 模式 63 3.3 factory method(工厂方法)— 对象创建型模式 70 3.4 prototype(原型)—对象...
观察者模式: 让多个观察者对象同时监听某一个 观察者模式 观察者模式定义了一种一队多的依赖关系, 主题对象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使他们能够自动更 新自己。 20、STATE —...
- **第6章**:建造者模式(Builder),允许分步骤构建复杂对象,隔离构造过程与表示,使得相同的构造过程可以创建不同的表示。 - **第7章**:单例模式(Singleton),确保一个类只有一个实例,并提供一个全局访问点...
4、建造者模式(Builder) 建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式适用于需要创建复杂对象的场合,如XML文档等。 5、原型模式(Prototype) 原型模式...