1.概要
1.1意图
将复杂对象的构建与表示分离,使得同样的构建过程可以创建不同的表示。需要注意如下几点。
(1)构建与表示分离:表明生成器模式的结构,构建过程被封装在导航器中,生成器则负责实现具体的表示。
(2)同样的构建过程:生成器模式关注的是构建过程,即构建过程是相同的。
(3)不同的表示:生成器模式并不在意产生对象的结果,其构造的产品不一定有相同的类型。
1.2使用场合
创建复杂对象的算法应该独立于该对象的组成部分及其装配方式,以及构造过程必须允许被构造的对象有不同表示情况下使用生成器模式。
1.3结构
生成器模式的结构如图所示。
(1)Builder:为创建Product对象的各个部件指定抽象接口。
(2)ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并
明确它所创建的表示,并提供一个检索产品的接口。
(3)Director:构造一个使用Builder接口的对象。
(4)Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定
义它的装配过程,包含定义组成部件的类,以及将这些部件装配成最终产品的接口。
2.效果
采用生成器模式可以轻松地改变产品的内部表示,上例中的脸谱画得不太好。但是如果我们创建一个新的生成器,艺术地绘制脸谱的各个部分,即可改善脸谱的质量。而这项工作完全可以和程序主体分离,由一位爱好美术的程序员独立完成。
生成器模式将构造代码和表示代码分开,一个脸谱可以用位图、字符串或对象模型来表示,构造代码完全一致。
构造过程可以更精细地控制,生成器模式强调的是产品的构造过程,产品各部分具有依赖关系非常重要。
需要注意的是,不同生成器产生的对象可能不属于同一类型,因此使用生成器的客户必须知道产品的具体类型。例如在创建脸谱的示例中,产生的GUI脸谱和脸谱对象是完全不同的类型。这意味着生成器经常不能互换,不同的生成器针对的客户程序也不相同。
3.生成器模式与抽象工厂的区别
生成器模式关注于将构造对象的过程和构造的各个部分分开
,而抽象工厂关注于构建一个产品系列
。实际上,最大的区别是生成器模式创建的产品不一定有共同的父
类,只要有类似的构造过程即可。在上例中,FaceBuilder仅仅抽象了构建过程,并没有规定一定产生的产品类型,具体的产品由具体的Builder
类决定。从上例产生的一个简单的Graphics对象中我们可以获得一个脸谱的位图,但也可用相同的导航器和结构获得一个Face对象。
实际上我们常见到的文件资源管理器的实现完全可以使用生成器模式。由于时间关系,这里不再讲述。有可能在以后的模式中涉及到这些。
- 大小: 22 KB
分享到:
相关推荐
C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式) 体验课程
在这里与各位分享本人从网络上下载的C#面向对象设计模式纵横谈系列视频,共有25节,除了第一节需要各位贡献一点资源分以作为对本人上传资源的回馈,后面的其他资源均不需要... 这是第4节:创建型模式Builder生成器模式
C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式) (Level 300)
C#视频-面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式)
本文实例讲述了C#设计模式之Builder生成器模式解决带老婆配置电脑问题。分享给大家供大家参考,具体如下: 一、理论定义 生成器模式 又叫:建造者模式,它 可以 把一个 复杂的对象,分步骤创建。 二、应用举例 需求...
NULL 博文链接:https://hnzhoujunmei.iteye.com/blog/1033310
Builder(生成器)模式[文].pdf
java设计模式之生成器模式,希望对大家有所帮助。
在《Head First Design Patterns》文中是这么介绍生成器模式的,“封装一个产品的构造过程,并允许按步骤构造”,感觉说得不是很清楚。而在网上查找相关资料是这么解释的,建造者模式(Builder Pattern)使用多个简单...
Builder(生成器)模式借鉴.pdf
Builder(生成器)模式参照.pdf
Builder(生成器)模式定义.pdf
C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式) C#面向对象设计模式纵横谈(5):Factory Method 工厂方法模式(创建型模式) C#面向对象设计模式纵横谈(6):Prototype 原型模式(创建型模式) C#面向...
【设计模式】- 生成器模式(Builder)(csdn)————程序
宏海科技代码生成器(1.0 bete) 使用说明: 采用三层模式生成代码 ,每个层都分为两部分 Auto文件夹为自动生成的完整代码,外面的为用户自己写方法用。 1: 先将三层搭建好(实在懒的话,一个项目也行),添加好引用,...
FreeBuilder为 Java 1.6 自动生成 Builder 模式。当设计类的构造函数或静态工厂具有多个参数时,Builder 模式是一个不错的选择。—— Effective Java,第二版,第39页背景在 Java 中实现 Builder 模式容易出错和...
(创建型模式)Builder 生成器模式
文章地址:https://blog.csdn.net/mazhiyuan1981/article/details/110638833
C#面向对象设计模式纵横谈(4):Builder 生成器模式(创建型模式).rar