再次研究设计模式 第二章 生成器

原创 2006年05月19日 14:38:00
 

1 Builder生成器)

目的

  • 把复杂对象的创建工作从表示中分离出来,同样的创建过程能够有不同的创建行为Separate the construction of a complex object from its representation so that the same construction process can create different representations.

结构

 

  • Builder : 创建一个产品对象的抽象接口。specifies an abstract interface for creating parts of a Product object.

  • ConcreteBuilder : 实现了Builder接口的产品的创建和组装者,定义并且跟踪它所创建的内容,提供一个接口来获取他创建的产品。(如 GetASCIIText, GetTextWidgetConstructs and assembles parts of the product by implementing the Builder interface. Defines and keeps track of the representation it creates. Provides an interface for retrieving the product (e.g., GetASCIIText, GetTextWidget).

  • Director : 创建一个对象来使用Builder接口Constructs an object using the Builder interface.

  • Product : 创建的复杂的对象,ConcreteBuilder 创建了产品的内容并通过产品组装方式确定了创建程。Represents the complex object under construction. ConcreteBuilder builds the product's internal representation and defines the process by which it's assembled.

通信方式

 

  • 客户代码创建Director对象并且通过指定的 Builder对象来配置它。The client creates theDirector object and configures it with the desired Builder object.

  • 当有产品的某一部分需要被创建时,Director通知Builder创建。Director notifies the builder whenever a part of the product should be built.

  • Builder处理Director的要求,添加产品的一部分。Builder handles requests from the director and adds parts to the product.

  • 客户代码从builder中获取创建的产品。The client retrieves the product from the builder.

  • 与抽象工厂(Abstract Factory)的差别,多了一层Director,通过Director来创建产品,因此可能创建更为复杂的产品系列来构成一个新的产品。

  • 抽象工厂是创建一系列的产品供客户代码使用,而生成器模式是生成多个产品后组合成一个产品供客户代码使用。

应用场合

  • 创建一个复杂对象的算法独立于对象的各个组成部分以及他们的组装方式。The algorithm for creating a complex object should be independent of the parts that make up the object and how they're assembled.

  • 创建过程必须允许被创建的产品有不同的表示。The construction process must allow different representations for the object that's constructed.

模式效果

  • 让你的可以改变一个产品的内部表示It lets you vary a product's internal representation.Builder对象提供了一个Director(装配者)它有一个创建产品的抽象接口。该接口使Builder隐藏了产品的表示和内部结构,同样它隐藏了产品是如何装配的,由于产品通过抽象接口创建的,因此当改变 产品的内部表示时,所有需要做的工作就是定义一个新的Builderhe Builder object provides the director with an abstract interface for constructing the product. The interface lets the builder hide the representation and internal structure of the product. It also hides how the product gets assembled. Because the product is constructed through an abstract interface, all you have to do to change the product's internal representation is define a new kind of builder.

  • 它将代码与创建及表示中分离。It isolates code for construction and representation. 生成器模式通过封装复杂对象创建及表示方式提高了模块化性能。客户代码不需知道任何关于产品内部结构类,这些类是不会在Builder的接口中出现的。The Builder pattern improves modularity by encapsulating the way a complex object is constructed and represented. Clients needn't know anything about the classes that define the product's internal structure; such classes don't appear in Builder's interface.

  • 使你能更好是控制创建过程。It gives you finer control over the construction process.  与其它的一次性产品的创建型模式不同,生成器模式是在Director的控制下一步一步地创建产品的,只有当产品完全创建完成后,Director才会从中取得它,因此该模式比其它的创建型模式更多地反应了创建的过程,也就使你能更好地控制创建过程和产品的内部表示。Unlike creational patterns that construct products in one shot, the Builder pattern constructs the product step by step under the director's control. Only when the product is finished does the director retrieve it from the builder. Hence the Builder interface reflects the process of constructing the product more than other creational patterns. This gives you finer control over the construction process and consequently the internal structure of the resulting product.

IOS 设计模式 生成器模式

转载:http://www.sxt.cn/u/10618/blog/6611  选择建造自己的房子的人会把工程外包给承包商。单一承包商不能建造整个房子,他将其分解为几个部分,然后转包给几个实际的建筑...
  • lcg910978041
  • lcg910978041
  • 2016年04月23日 19:29
  • 322

统计学习方法-第二章-感知机

在看了机器学习基石的感知机算法视频之后,把李航的统计学习方法的这部分内容也看了。 视频讲解更详尽更清晰一点,适合数学基础一般的同学学习之后再去看纯数学的推导过程,在理解算法的原理之后会更容易看懂推导(...
  • hahahyahshsba
  • hahahyahshsba
  • 2017年10月20日 10:37
  • 42

设计模式笔记--设计模式比较

设计模式笔记--设计模式比较
  • bihansheng2010
  • bihansheng2010
  • 2016年01月15日 16:10
  • 3180

从研究的角度来思考软件设计模式——研究方向

近期在做一些关于软件设计模式的研究工作,通过广泛的收集与阅读,细致的分析与整理,现将设计模式的几个主要研究方向罗列如下: (1) 设计模式的可视化研究(Visualization)       如何在...
  • LoveLion
  • LoveLion
  • 2012年07月24日 21:23
  • 4065

再次研究设计模式 第一章 抽象工厂

最近苦学UML2.0,突然发现原先以为了解的设计模式已经淡忘了。最近5年来国内介绍这个的书是多如牛毛啊,不外乎互相搬砖。于是决定自己再从英文原版中翻译一下,顺便还可以加上自己的理解。工作日每天翻译一段...
  • ploto
  • ploto
  • 2006年05月19日 14:36
  • 1007

23种经典设计模式的java实现_4_生成器模式

23种经典设计模式的java实现之生成器模式在这里我们使用一个构建房屋的场景来说明“生成器”——builder模式的使用。这个模式的定义是:1、当创建复杂对象的算法应该独立于该对象的组成部分以及它们的...
  • kthq
  • kthq
  • 2007年06月30日 12:08
  • 1830

设计模式分析与探究

设计模式无非是通过两种手段---封装和解耦 , 以达到软件的健壮性和可复用性。而23种设计模式是这些思想的集中体现, 其实自己完全可以依照上述思想,对这23种基本的模式进行一些修改,以适应自己的需求。...
  • walkingmanc
  • walkingmanc
  • 2009年06月23日 10:18
  • 807

iOS设计模式(三) 生成器模式

写的比较乱,看不懂就不要看了,主要给自己看的。。 这里主要谈谈自己的理解。 生成器模式可以分割代码,让自己的类里面代码不那么庞大。 他用来构建复杂的,多个步骤构件对象的情况。 举个例子: ...
  • a2331046
  • a2331046
  • 2016年05月25日 16:25
  • 181

设计模式探讨

1、模式的定义:什么是模式?应该没有一个很精确的定义,但我们可以通俗的来说。模式是特定的‘语境’中重复出现的设计‘问题’的‘解决方案’。模式是人们经验的积累,人们利用经验来指导新的软件的设计。2、模式...
  • d9g_bj
  • d9g_bj
  • 2007年03月29日 22:27
  • 558

Java设计模式--生成器模式

生成器模式将一个复杂对象的构建与它的表示分离,使同样的构建过程可以创建不同的表示。Builder PatternSeparate the construction of a complex objec...
  • bug_moving
  • bug_moving
  • 2016年09月25日 23:51
  • 1598
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:再次研究设计模式 第二章 生成器
举报原因:
原因补充:

(最多只允许输入30个字)