- 浏览: 831243 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (379)
- struts (5)
- hibernate (16)
- spring (16)
- ssh (20)
- MySQL (16)
- 数据库脚本 (2)
- DownLoad (1)
- GAE (5)
- Java (103)
- LoadRunner (2)
- VF (1)
- 学习资料 (24)
- 软件使用 (21)
- 通信类 (4)
- 生活 (3)
- J2ME (1)
- 心理学 (1)
- Linux (26)
- Android (3)
- Oracle (1)
- 面向对象概念&面试准备 (11)
- ExtJs (2)
- Google Map (1)
- Flex (47)
- 算法研究 (1)
- share (20)
- python (1)
- MongoDB (7)
- centos6 (13)
- C++ (8)
- DB2 (3)
- C# (1)
- 代码片段 (24)
- Lucene (2)
- php (1)
- NodeJS (1)
- Express (1)
最新评论
-
shua1991:
已阅,我表示同意。
Eclipse统计代码行数 -
nakedou:
写的不错,挺详细的
在CentOS中使用 yum 安装MongoDB及服务器端配置 -
sjp524617477:
好方法
Eclipse统计代码行数 -
simpletrc:
<script>ale ...
Java写到.txt文件,如何实现换行 -
csdn_zuoqiang:
Apache Ftp Server,目前是1.0.4,非常好的 ...
Apache FtpServer在64位系统下服务不能启动解决方法
实际上,既然Builder和Factory同属创建型模式,那么他们的最大共同点就在于都可以创建类对象,在这点上,不光这两个模式一样,其它创建型模式也一样。但正如在《深入探索Factory模式与Prototype模式的异同(续)》一文中所说,这些模式,功能上的相似,只是“形似而非神似”。既然这样,那好,下面就让我们能看看Builder和Factory在功能的相似上,存在哪些神韵方面的差别。
首先,也是最重要的一点,就是虽然Builder和Factory都可创建产品,但两者所创建的产品类型完全不一样。Factory创建只能是单一的产品(单一在这指它非复合产品),而Builder所创建的产品是复合产品,即产品本身就是由其它部件产品组成的。
举个例子来说,现在要生产一辆车,假设它就只由这三个部分组成:玻璃、轮子、发动机。对于工厂模式来说,他创建后返回的,只能是玻璃,或者轮子,抑或是发动机。不管怎么样,他不能向客户返回一辆完整的汽车,要得到一辆完整的汽车,客户必须自己动手去把这些零部件组装成一辆汽车。从这个意义上来讲,工厂模式中的工厂,只是充当了零件厂的角色。那Builder又是如何创建产品的呢?在Builder模式中,一般不需要、也不充许向客户返回单个部件,他向客户返回的,仅仅就是一部已经完全组装好的汽车成品。对于汽车部件的生产细节,客户不需要、也不应该让他们知道。写到这,我突然想到了组装电脑与品牌电脑的差别,组装电脑虽然价格便宜,且易于改动,但性能没有保证,另外你自己还必须了解很多有关电脑方面的知识;对于品牌电脑,价格贵这点先暂时不说,关键在于他不灵活,但是它的性能可以得到很好保证(由厂家),这易像我们在Builder的系统端保证部件的质量一样。另外,对于品牌电脑,客户根本不需要了解多少电脑组装方面的知识,就可以把一台电脑抱回家,开机使用了。那么,在实际运用中,你是喜欢做DIY一族呢,还是喜欢稳定有保证的质量呢?好像在我们编著程的这个过程中,我们比较趋向于使用“品牌电脑”。这也就为我们正确使用这两种设计模式提供了一个方向:如果你要生产的产品是由不同部件组成的,你最好使用Builder模式,而非Factory模式。
另外,Builder和Factory的差别,就在于他们所生产部件产品所在产品树的问题。这样说,可能有点拗口。具体来说吧,在工厂模式中,我们知道,一个工厂可以创建多个产品,但一个工厂模式中所创建的某个产品,都会和另一个工厂中所创建的产品在同一棵继承树上。如果大家看过我最早写的《用Java实现的设计模式系列(1)—Factory 》那篇文章,就会记得,我在CFactoryMac中创建了一种产品叫MacRam,而在CFactoryWin中创建了另一种产品叫WinRam,很显然,这两种产品是在同一棵继承树上的。对于它们之所以会出现在同一棵继承树上,是完全由Factory模式本身所决定的。大家如果看过Factory的UMl图,就应该记得,要实现Factory模式,一定要有一个Abstract Product类,具体产品再由它派生出来。好了,说完了Factory,再让我们来看看Builder中是否必这么做!实际上,在Builder模式中,我们只是在Abstract Builder中封装了创建部件的接口,而具体创建了什么部件,不同的实际Builder可能会生产出完全不一样的部件,这样不会存在任何问题,因为,我上面说过,Builder只是向客户返回成品,而不向客户返回具体部件,这样,当然就允许产品的部件按要求随意变化了。
再举个例子吧,假如你现在要创建两种风马不相及的东西,例如一种是人,它就只由这几部分组成:脑、身、四肢;另一种是树,也由三个部分组成:根、叶、茎。
本文出处:http://blog.csdn.net/blackphoenix/archive/2002/08/20/14154.aspx
评论
当一个复杂对象的创建需要很多步骤的时候,这些步骤在不同的条件下是变化的.通过不同的Builder创建'不同风格'的复杂对象.
为什么不用类本身的constructor呢,构造函数应该只是对本身的数据(state&data)进行初始化.
Builder的buildPart可以在ConcreteBuilder被override,不同的ConcreteBuilder的buildPart不同,从而
得到不同的product.
客户端代码通过使用不同ConcreteBuilder,得到不同规格的产品.
Builder builder = new ConcreteBuilder(); //这个地方也可根据外部配置文件进行反射.
Director director = new Director( builder );
Product product = builder.getResult();
Builder 和Factory有什么区别呢,我们包Builder简化,去掉Director,发现其和简单Factory就一样了.
为什么有了Factory还要有Builder呢,客户端无非都是得到想要的product啊?不理解......,目前的理解是:
Builder:分步骤的,构建出一个复杂对象,这个复杂对象有很多parts,在不同的场景中,part可能不同.
e.g. 一座房子,有屋顶,门,天花板,地板.
房子A的屋顶是欧式的斜顶,门是木门,天花板也是木的,地板也是木的.
房子B的屋顶是平顶的水泥板,门是防盗门,天花板是吊顶的,地板是木的.
它们的组成过程一样,每一个parts不同.
Simple Factory:构建简单对象,在不同的场景中,这个对象的实现可能不一样.
e.g. 保存数据的一个类,都有save方法.
类A的save方法把数据保存到DB.
类B的save方法把数据保存到File.
客户端通过factory得到一个这种类的对象,不关心是类A还是类B,调用save就行了.
Abstract Factory:构建系列对象,对象间有关联,不同的场景关联不同.
有一个factory,创建两个不同的task,task1和task2.
factoryA创建的task1要在task2之前完成.
factoryB创建的task1要在task2之后完成.
(parts不同,更关注这个对象的组成,实现不同,更关注这个对象的行为.)
其实,客户端本来就不关心你用的是Builder,Factory,Abstract Factory,只有你保证客户端代码不用改就行了.
发表评论
-
微信JS
2013-10-26 21:17 2042<div class="iteye-blog- ... -
ubuntu下MySQL用source命令导入sql文件出现乱码解决方法
2012-11-18 23:46 1487首先建立数据库的时候指明数据库编码如: CREA ... -
RandomAccessFile
2012-10-18 18:16 944public void run() { try { ... -
java中多种方式读文件
2012-10-18 16:53 927java中多种方式读文件一、多种方式读文件内容。1、按字节读取 ... -
FileChannelMain
2012-10-15 18:12 1075package scan; import java ... -
Apache FtpServer在64位系统下服务不能启动解决方法
2012-06-10 21:29 6801Apache FTPServer是一款用Java开发的 ... -
Java 集合类
2012-06-07 22:03 1571Java 集合类 1. 为什么要了解J ... -
short、int、long与byte之间的转换工具类
2012-05-31 11:05 4478/** * 各基础类型与byte之间的转换 * ... -
Linux Mint 13 配置JAVA 环境
2012-05-24 22:35 26210.1--下载 JAVA ... -
FatJar+Exe4j+Inno Setup 生成可执行的exe文件
2012-04-17 10:54 14281、fatjar 是Eclipse的一个免费的插件。它的 ... -
JPanel JTextField add Focus 获取焦点解决方案
2012-03-30 21:29 2980public class TabPagePanel ex ... -
JList List<E> Page 分页
2012-03-30 21:28 1733package view.retrieve.comps. ... -
JButton setAction的BUG
2012-03-23 10:53 1278今天在使用JButton的时候,想用setText()setI ... -
自定义JTabbedPane皮肤
2012-03-22 12:05 4711package ui; import java.awt. ... -
两个工具类
2012-03-17 21:27 867package com.retrieve.utils; ... -
两个工具类
2012-03-17 21:27 0package com.retrieve.utils; ... -
mysql、sqlserver、oracle分页,java分页统一接口实现
2012-03-13 17:56 0定义: pageStart 起始页,pageEnd 终止页, ... -
Invalid command: InetLoad::load
2012-03-06 16:41 1287Invalid command: InetLoad::load ... -
NIO: High Performance File Copying
2012-03-01 17:25 1154In a previous tip, I discussed ... -
自定义JList
2012-02-03 15:39 774自定义JList。
相关推荐
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