模式02 生成器模式(Builder)

1. 意图

  将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

2. 结构

  此模式的结构如下图所示。

  

3. 参与者

  • Builder
    -- 为创建一个Product对象的各个部件指定抽象接口。
  • ConcreteBuilder
    -- 实现Builder的接口以构造和装配该产品的各个部件。
    -- 定义并明确它所创建的表示。
    -- 提供一个检索产品的接口。
  • Director
    -- 构造一个使用Builder接口的对象。
  • Product
    -- 表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程。
    -- 包含定义组成部件的类,包括将这些部件装配成最终产品的接口。

4. 协作

  • 客户创建Director对象,并用它所想要的Builder对象进行配置。
  • 一旦产品部件被生成,导向器就会通知生成器。
  • 生成器处理导向器的请求,并将部件添加到该产品中。
  • 客户从生成器中检索产品。

下图的交互图说明了Builder和Director是如何与一个客户协作的。

5. 效果

  以下是Builder模式的主要效果:
  1) 它使你可以改变一个产品的内部表示    Builder对象提供给导向器一个构造产品的抽象接口。该接口使得生成器可以隐藏这个产品的表示和内部结构。它同时也隐藏了该产品是如何装配的。因为产品是通过抽象接口构造的,你在改变该产品的内部表示时所要做的只是定义一个新的生成器。
  2) 它将构造代码和表示代码分开    Builder模式通过封装一个复杂对象的创建和表示方式提高对象的模块性。客户不需要知道定义产品内部结构的类的所有信息;这些类是不出现在Builder接口中的。每个ConcreteBuilder包含了创建和装配一个特定产品的所有代码。这些代码只需要写一次;然后不同的Director可以复用它以在相同部件集合的基础上构建不同的Product。
  3) 它使你可对构造过程进行更精细的控制    Builder模式与一下子就生成产品的创建型模式不同,它是在导向者的控制下一步一步构造产品的。仅当该产品完成时导向者才从生成器中取回它。因此Builder接口相比其他创建型模式能更好地反应产品的构造过程。这使你可以更精细地控制构建过程,从而能更精细地控制所得产品的内部结构。

【摘自《设计模式 可复用面向对象软件的基础》机械工业出版社】

时间: 2024-10-22 12:42:05

模式02 生成器模式(Builder)的相关文章

设计模式解密(6) - 建造者模式(生成器模式)

1.简介 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 分解一下定义: 1.复杂对象的表示: 2.复杂对象的构建过程: 3.可分离的通用构建过程,也适用于其它复杂对象的表示: 4.适用于一些基本部件不会变,而其组合经常变化的时候. 英文:Builder 类型:创建类模式 2.原理及组成 引:类图 四个要素: 产品类:一般是一个较为复杂的对象,也就是说创建对象的过程比较复杂,一般会有比较多的代码量.在本类图中,产品类是一个具体的类,而非抽象类. 实际编程中,产品

7创建型模式之建造者模式

概念 Builder模式也叫建造者模式或者生成器模式,是由GoF提出的23种设计模式中的一种.Builder模式是一种对象创建型模式之一,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,通过子类继承和重载的方式,动态地创建具有复合属性的对象. 对象的创建:Builder模式是为对象的创建而设计的模式- 创建的是一个复合对象:被创建的对象为一个具有复合属性的复合对象- 关注对象创建的各部分的创建过程:不同的工厂(这里指builder生成器)对产品属性有不同的创建方法 角色和职责 1)

每天一个设计模式-7 生成器模式(Builder)

每天一个设计模式-7 生成器模式(Builder) 一.实际问题 在讨论工厂方法模式的时候,提到了一个导出数据的应用框架,但是并没有涉及到导出数据的具体实现,这次通过生成器模式来简单实现导出成文本,Xml等具体的格式. 导出成文本或Xml等格式的数据时,一般都会有各自的格式,比如:导出的文件都有3个部分,文件头,内容,尾. 二.问题分析 无论哪种导出格式,都需要3个部分,文件头,内容,尾等信息,并且他们的内容相同.即他们的构造算法固定,只是生成的结果不同:能不能把算法(构建)和结果(外观)分离出

创建型-生成器模式(Builder)

1.意图: 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 2.场景描述: 编辑软件的“另存为”功能便是生成器模式的一个体现.例如,Word的另存为功能,可以选择将文件存储为doc.docx.pdf.txt等格式,但是通过word的另存为功能转变文档的存储格式时都采用了“文件 --> 另存为”,相同的创建过程.当需要对word支持新的类型转换时,例如,添加*.newtype类型的转换,此时只需在“另存为”对话框的“选择存储类型”中添加一行"*.newtype&q

跟着实例学习设计模式-生成器模式(builder)

生成器模式是创建型设计模式. 设计意图:将一个复杂的类表示与其构造相分离,使得相同的构建过程能够得出不同的表示. 实例类图: IVehicleBuilder:抽象建造者,为创建一个Vehicle对象并创建它的相关部件指定的抽象接口,把产品的生产过程分解为不同的步骤,从而使具体的建造者在具体的建造步骤上具有更多弹性,从而创造出不同表示的产品.(这里就是小车和卡车) CarBuilder.TrunkBuilder:具体建造者,实现IVehicleBuilder接口,构造和装配产品的各个部件定义并明确

生成器模式(Builder)-- 对象创建型模式

1. 动机 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示.一个RTF(Rich Text Format)文档交换格式的阅读器应能将RTF转换为多种正文格式.该阅读器可以将RTF文档转换成普通ASCII文本或转换成一个能以交互方式编辑的正文窗口组件.但问题在于可能转换的数目是无限的.因此要能够很容易实现新的转换的增加,同时却不改变RTF阅读器.其实也就是,前面的数据接卸(源头处理)归解析,后续的显示处理,由显示处理的部分来完成.在数据解析和显示处理之间架设一个标准的桥梁

设计模式(二): BUILDER生成器模式 -- 创建型模式

1.定义 将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式. 2.适用场景 1. 当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时. 2. 当构造过程必须允许被构造的对象有不同表示时. 3.评价 1. 它使你可以改变一个产品的内部表示. Builder对象提供给导向器一个构造产品的抽象接口.该接口使得生成器可以隐藏这个产品的表示和内部结构.它同时也隐藏了该产品是如何装配的.因为产品是通过抽象接口构造的,你在改变该产品的内部表

生成器模式(Builder)

1. 模式的定义 不管是输出成文本文件,还是输出到XML文件,在实现的时候,步骤基本都是一样的,大致可以分为以下四步: 1)先拼接文件头的内容 2)然后拼接文件体的内容 3)再拼接文件尾的内容 4)最后拼接好的内容输出称为文件 换句话说,也就是构建每种格式的数据文件的处理过程,应该和具体的步骤实现分开,这样能够复用处理过程. 生成器模式的定义:将一个复杂对象的构建过程与它的表示分离,使得同样的构建过程可以创建不同的表示. 2. UML图 Builder:生成器接口,定义创建一个Product对象

实战生成器模式(Builder Pattern In Practice)

原文链接:http://www.javacodegeeks.com/2013/01/the-builder-pattern-in-practice.html 我不会详细介绍这个模式,因为已经有大量的文章或者书籍对该模式进行过详细的解析.我将告诉你的是为什么以及什么时候你应该考虑使用它.值得一提的是,我所介绍的这个模式和设计模式四人帮的书(<设计模式:可复用面向对象软件的基础>)里面的有些许区别.四人帮书里面介绍的生成器模式重点在抽象出对象创建的步骤,并通过调用不同的具体实现从而得到不同的结果,