阿蜜果
不骄,不矜,勤工,好学,才是好女子
你所浪费的今天,是昨天死去的人奢望的明天。
你所厌恶的现在,是未来的你回不去的曾经。
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 297, comments - 1618, trackbacks - 0
设计模式学习笔记--建造模式(Builder)
建造(Builder)模式
属于对象的
创建模式
。
1. 定义
建造模式将一个产品的内部表象与产品生成过程分割出来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
2. 使用的原因
是为了将构建复杂对象的过程和它的部件解耦。
3. 适用的情况
建造模式利用一个导演者对象和具体建造者对象一个一个地建造出所有的零件,从而建造出完整的产品对象。建造者模式将产品的结构和产品的零件建造过程对客户端隐藏起来,把对建造过程进行指挥的责任和具体建造零件和责任分割开来,达到责任划分和封装的目的。
4. 类图结构及其说明
1)
建造模式的类图如下所示:
2)各类的说明如下:
i)抽象建造者(Builder)角色
:给出一个抽象接口,以规范产品对象的各个组成成分的构造;
ii)具体建造者(ConcretBuilder)角色
:它在应用程序的调用下创建产品的实例。完成任务为;
a) 实现抽象建造者Builder接口,给出一步步完成创建产品实例的操作;
b) 在创建完成后,提供产品的实例。
iii) 导演者(Director角色):
调用具体建造者角色以创建产品对象;
iv)产品(Product)角色
:建造中的复杂对象。一般情况下,一个系统不止一个产品类。
5. 应用举例
以下实例建造一所Amigo想要的一所房子,呵呵,初中时的梦想:)
一所小小的竹子做成的房子,满屋挂满风铃,有一个茶几,坐落在山上。
1) 需求分析
Amigo的这所房子的建造跟我们讨论的建造模式很是相关哦,竹子、风铃、茶几相当于我们所说的“零件” ,最后建造成的房子相当于Amigo梦寐以求的竹房。呵呵,我们开始建造吧,完成Amigo的梦想!
i)我们首先建立一个接口Builder,它定义如何创建我想要的房子的各个组成部分:
public
interface
Builder
{
//
创建想要的竹子
void
buildBamboo();
//
创建风铃
void
buildWindbell();
//
创建茶几
void
buildTeapoy();
//
返回最后建造好的房子
//
房子的组装过程不在这里进行,而是转移到Director中进行,从而实现了解耦过程和部件
House getHouse();
}
ii)Director类将竹子、风铃、茶几最后组装成我的full house
public
class
Director
{
private
Builder builder;
public
Director(Builder builder)
{
this
.builder
=
builder;
}
/** */
/**
* 该方法组装我的full house
*/
public
void
construct()
{
builder.buildBamboo();
builder.buildWindbell();
builder.buildTeapoy();
}
}
iii)具体建造器,茶几等怎么建造成的?我这样的懒人是不会知道的了,到时候请人吧。
public
class
ConcreteBuilder
implements
Builder
{
public
void
buildBamboo()
{
//
让别人去做吧,我去数工钱了
}
public
void
buildWindbell()
{
//
同上
}
public
void
buildTeapoy()
{
//
同上
}
public
House getHouse()
{
}
}
iv)House类
public
class
House
{
}
v) 下面来看看如何使用Builder模式来创建我的竹房,呵呵。
ConcreteBuilder builder
=
new
ConcreteBuilder();
Director director
=
new
Director(builder);
director.construct();
House house
=
builder.getHouse();
:),建得差不多吧,还差点什么呢,以后慢慢想咯。
参考书籍:《Java与模式》
《Patterns in Java》
posted on 2007-03-18 23:27
阿蜜果
阅读(4571)
评论(9)
编辑
收藏
所属分类:
Design Pattern
FeedBack:
#
re: 设计模式学习笔记--建造模式(Builder)
2007-03-19 09:10 |
Tortoise
支持!你好用功呀!~
回复
更多评论
#
re: 设计模式学习笔记--建造模式(Builder)
2007-03-19 11:54 |
Tortoise
好经典呀。就是不知道干吗要这样设计
回复
更多评论
#
re: 设计模式学习笔记--建造模式(Builder)
2007-03-20 10:46 |
zhyiwww
讲的简单易懂。基本上明白了,还需要人深入的学习和实践。
回复
更多评论
#
re: 设计模式学习笔记--建造模式(Builder) [未登录]
2007-03-20 13:21 |
阿蜜果
呵呵,努力学习设计模式中,up下篇,template模式
回复
更多评论
#
re: 设计模式学习笔记--建造模式(Builder)
2008-01-08 12:29 |
hbyufan@hotmail.com
一所小小的竹子做成的房子,满屋挂满风铃,有一个茶几,坐落在山上。
回复
更多评论
#
re: 设计模式学习笔记--建造模式(Builder) [未登录]
2009-02-10 14:28 |
bean
ConcreteBuilder builder = new ConcreteBuilder();
最好用接口声明
回复
更多评论
#
re: 设计模式学习笔记--建造模式(Builder)
2009-12-21 15:44 |
xiaoyang818
ConcreteBuilder builder = new ConcreteBuilder();
最好改成
Builder builder = new ConcreteBuilder();
回复
更多评论
#
re: 设计模式学习笔记--建造模式(Builder)
2011-03-17 11:20 |
fxbird
都是些人云亦云的家伙,请问博主,你能说出建造模式和构造函数有什么区别吗?建造的时候难道不需要参数吗,哪有不需要参数就能构造出的东西。
回复
更多评论
#
re: 设计模式学习笔记--建造模式(Builder) [未登录]
2012-09-24 12:06 |
C
@xiaoyang818
+1
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
知识库
C++博客
博问
管理
相关文章:
蜜果私塾:在JavaScript中使用适配器模式
蜜果私塾:在JavaScript中使用工厂模式
蜜果私塾:在JavaScript中使用单例模式
设计模式学习笔记--观察者模式(Observer) (未完待续)
设计模式学习笔记--调停者模式(Mediator)
设计模式学习笔记--备忘录模式(Memento)
设计模式学习笔记--策略模式(待续)
设计模式学习笔记--模板方法(Template Method)模式
设计模式学习笔记--建造模式(Builder)
设计模式学习笔记--原型(Prototype)
<
2007年3月
>
日
一
二
三
四
五
六
25
26
27
28
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
生活将我们磨圆,是为了让我们滚得更远——“圆”来如此。
我的作品:
玩转Axure RP
(2015年12月出版)
Power Designer系统分析与建模实战
(2015年7月出版)
Struts2+Hibernate3+Spring2
(2010年5月出版)
留言簿
(262)
给我留言
查看公开留言
查看私人留言
随笔分类
Ajax(3)
Ant(1)
Auto Code(4)
Cewolf
CMMI(1)
CSS(2)
CVS(1)
database(15)
Design Pattern(11)
Eclipse BIRT(1)
EJB
extremecomponents(1)
GIS(2)
Hibernate(8)
iBATIS(2)
IDE(1)
Inno Setup(2)
IT评论(2)
Java(36)
Javascript(32)
JBoss(1)
JFreeChart(3)
JFreeReport(3)
JSF
Linux(3)
MySql(11)
Open Source(4)
Oracle(5)
Other(13)
Spring(12)
Sql Server(1)
Struts(7)
Struts2(8)
Tomcat
UML
Web(8)
Web Service(3)
Workflow
产品原型设计(8)
似水流年(13)
协议(12)
原创小说(1)
技术评论
架构师之路(12)
电信知识(3)
网络通信相关(11)
职场感悟(6)
解决方案(12)
项目管理(8)
随笔档案
2016年3月 (2)
2015年11月 (1)
2015年9月 (1)
2015年6月 (3)
2015年5月 (4)
2014年12月 (2)
2014年7月 (1)
2014年6月 (1)
2014年5月 (2)
2014年1月 (2)
2013年10月 (1)
2013年8月 (1)
2013年7月 (1)
2013年4月 (1)
2013年2月 (1)
2012年11月 (2)
2012年10月 (1)
2012年1月 (1)
2011年11月 (8)
2011年10月 (4)
2011年9月 (1)
2011年8月 (2)
2011年7月 (5)
2011年2月 (2)
2011年1月 (1)
2010年12月 (3)
2010年11月 (9)
2010年9月 (1)
2010年7月 (2)
2010年6月 (2)
2010年5月 (5)
2010年4月 (2)
2009年12月 (4)
2009年11月 (2)
2009年10月 (1)
2009年9月 (3)
2009年8月 (5)
2009年7月 (5)
2009年5月 (1)
2008年10月 (3)
2008年9月 (3)
2008年8月 (1)
2008年6月 (2)
2008年5月 (3)
2008年4月 (2)
2008年2月 (2)
2008年1月 (11)
2007年12月 (9)
2007年11月 (7)
2007年10月 (9)
2007年9月 (12)
2007年8月 (24)
2007年7月 (10)
2007年6月 (2)
2007年5月 (3)
2007年4月 (18)
2007年3月 (24)
2007年2月 (24)
文章分类
喜爱歌词(12)
生活点滴(3)
芝麻粒知识(8)
英语(1)
相册
java学习相关
other
产品经理相关
图书相关
工具相关
日历
架构师相关
设计模式相关
贴图
走走拍拍
饭团
关注blog
BeanSoft
JAVA-HE
kenzhang
即兴的灵感
坏男孩
孙卫琴
施伟
蚂蚁
银河使者
鼠标
积分与排名
积分 - 2284416
排名 - 3
最新评论
1. re: 新书推荐:《Power Designer系统分析与建模实战》
你好。买了书,麻烦把书中的样例工程文件发给我。非常感谢。
我的邮箱:wen027andy@163.com
--文良
2. re: 新书推荐:《Power Designer系统分析与建模实战》
@智禄
谢谢指出,下次改版修正:)
--阿蜜果
3. re: 新书推荐:《Power Designer系统分析与建模实战》
6.1.3 9.存储函数
存储函数与存储函数类似,……
此处应该是:存储函数与存储过程类似,……
我买的是多看上的电子版,请修改
--智禄
4. re: 新书推荐:《Power Designer系统分析与建模实战》
您好,今天买了您的这本书,为了更好的学习,麻烦将书中的样例工程文件发给我,万分感谢,感谢作者写出这么好的书,我特别需要,祝大卖~~
yaozhilu@foxmail.com
--智禄
5. re: 新书推荐:《Power Designer系统分析与建模实战》
您好,书不错,已经买了,麻烦发套样例工程吧,最好详细点的,万分感激!
jackylee365@163.com
--李成龙
阅读排行榜
1. 常用加密算法的Java实现总结(二)——对称加密算法DES、3DES和AES(143652)
2. 用Ant实现Java项目的自动构建和部署(123933)
3. 异常备忘:java.lang.UnsupportedClassVersionError: Bad version number in .class file(113762)
4. Java代码规范、格式化和checkstyle检查配置文档(71749)
5. 常用加密算法的Java实现总结(一)——单向加密算法MD5和SHA(62332)
6. 通用权限管理系统设计篇(三)——概要设计说明书(61690)
7. 使用XFire+Spring构建Web Service(一)——helloWorld篇(53569)
8. 基于注解的Spring MVC+Hibernate简单入门(52550)
9. 在阿里云Linux服务器上安装MySQL(49558)
10. 关系型数据的分布式处理系统MyCAT(1)—概述和基本使用教程(47728)
评论排行榜
1. 使用XFire+Spring构建Web Service(二)(102)
2. 使用XFire+Spring构建Web Service(一)——helloWorld篇(70)
3. 通用权限管理系统设计篇(三)——概要设计说明书(64)
4. 异常备忘:java.lang.UnsupportedClassVersionError: Bad version number in .class file(54)
5. 通用权限管理设计篇(二)——数据库设计(40)