Java资源网

| JAVA基础 | 环境配置 | JDBC | 线程技术 | Socket编程 | JavaMail | JAVA与XML | 设计模式 | 技术新闻 | Java认证 | 程序人生 软件下载
| JSP&Servlet | Spring | Struts | Hibernate | JBuilder | Eclipse | WebService | EJB技术 | J2ME开发 | 应用服务器 | JXTA | Ajax
Articles search文章搜索
   关键字:
   类 别:
       
New download 最新下载
· [组件]HTML Parser 1.5
· [教程]WebSphere Studio应用教程
· [组件]JDom 1.0
· [工具]Junit3.8.1
· [教程]EJB编程及J2EE系统架构和设计
· [教程]EJB教程
· [教程]J2EE Tutorial中文版
· [教程]Java编程思想2(英文)
· [教程]java编程思想(完整版)
· [教程]Java网络编程
New articles 最新文章
· 设计移动 Web 服务
· 解析XML的时候完全忽略DTD
· 理解XML Schema XML Schema 初步
· 标签库的深入研究
· 提升JSP应用程序的七大绝招
· 如何使用JDOM对XML文件进行操作
· 处理XML字符串中特殊字符
· 利用Digester把XML转换成为Java对象
· 使用WebService 和RMI远程协作
· 使用Axis开发Web Service程序
Articles top 热门文章
· Eclipse基础--plugin插件安装(6644)
· eclipse+tomcat+lomboz的安装配置说明(4774)
· Java程序员就业前景(4584)
· Windows下JAVA环境变量的设置祥解(3788)
· Tomcat下JSP、Servlet和JavaBean环境的配置(3716)
· 使用links方式安装Eclipse插件(3698)
· 一个老程序员的心理话(3533)
· linux下jdk的安装与配置(3459)
· 初学者入门:Structs中基本配置入门(3334)
· Eclipse 运行命令行参数大全(3084)
您的位置:首页>>设计模式>>设计模式学习笔记之二一:创建者(Builder)
设计模式学习笔记之二一:创建者(Builder)
2007-04-13   来源:www.javaresearch.org  作者:未知

意图:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示,而且实
际的创建方法和过程客户是不知道。通常意义上我们可以这样理解:我们需要创建一个复杂
的对象,但是提供给我们的是创建其中的一部分的操作,我们自己需要决定创建的各个部分
的数量、顺序和关系,然后最终通过一个方法得到最终的产品,而各个部分的具体的内容我
们不知道,是由我们选择的具体的创建者不同而不同的。

通俗的例子:
设想你是一个顾客,你上一个餐厅吃饭要点一桌饭菜,你要求的最终结果是一桌可口的饭菜,
而一桌饭菜由不同的部分构成(主食、酒水、热菜、冷菜、汤),而各个部分是否需要,需
要多少,上菜的顺序都是你自己可以控制的,最终你得到的是自己创建的一桌饭菜,而且这
桌饭菜的结果和你选择的餐厅是直接相关的(不同的餐厅对同一道菜的做法和用料可能是不
同的),而且这个菜是如何做出来的你也不知道。

参与者:
Client:就是顾客或者客户,例子中就是你
Builder:创建者,定义一些接口方法创建产品的各个部分以及得到最终的结果,例子中等价于服务员
ConcreteBuilder:具体创建者,就是真正生成产品的创建者,例子中就是具体的某个餐厅的厨师
Product:要创建的最终的产品,由多个复杂的子产品组成,例子中就是一桌饭菜

适用性:
1、创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式。
2、构造过程必须允许被构造的对象有不同的表示。
3、被构造的对象比较复杂,其组成部分的个数和组合方式随客户的要求差异比较大。

优点:
1、你可以自由的改变产品的内部表示,因为生成器隐藏了产品的表示和内容结构,同时也隐藏了产品是如何装配的,产品的创建都是通过抽象接口构造的。
2、构造代码和表示代码分离了。它通过封装一个复杂对象的创建和表示方式提高了对象的模块性,客户不需要知道定义产品内容结构的类的信息,它们是不出现在创建者接口中的。每个具体的创建者包含了创建和装配一个特定产品的所有代码,然后不同的客户就可以复用它们以在相同的部件集合的基础上构造不同的产品(仅仅是内容表示不同)
3、客户可以对构造过程进行更精细的控制,实际上产品部件的个数和结合方式都是由用户来控制的,其构造过程完全是由客户自己控制的。

缺点:
好像没有什么明显的缺点。

技巧:
1、一般情况下至少需要以下的方法接口:生成“空的”最终产品、生成子部件、得到最终产品,生成子部件的方法往往不会返回任何值,生成的子部件被直接添加到产品中了,其方式是由代码内容决定的。
2、产品不需要抽象类,特别是由于创建对象的算法复杂而导致使用此模式的情况下或者此模式应用于产品的生成过程,其最终结果可能差异很大,不大可能提炼出一个抽象产品类。
3、创建者中的创建子部件的接口方法不是抽象方法而是空方法,不进行任何操作,具体的创建者只需要覆盖需要的方法就可以,但是这也不是绝对的,特别是类似文本转换这种情况下,缺省的方法将输入原封不动的输出是合理的缺省操作。


  --相关文章--
· 面向对象编程,我的思想 (2007-04-13)
· 面向对象的思维方式 (2007-04-13)
· 通过Javanbsp;Swing看透MVC设计模式 (2007-04-13)
· 适配器模式(Adapternbsp;Pattern) (2007-04-13)
· 追MM与Java的23种设计模式 (2007-04-13)
· 责任链模式(Chainnbsp;ofnbsp;Responsibility) (2007-04-13)

版权所有©2005-2006 JAVA资源网 渝ICP备05007591号 虚拟主机 | 关于我们 | 联系方式 | 广告业务 | 网站地图 | 友情链接