阿蜜果
不骄,不矜,勤工,好学,才是好女子
BlogJava
首页
新随笔
新文章
联系
聚合
管理
posts - 198, comments - 910, 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
阿蜜果
阅读(1592)
评论(5)
编辑
收藏
所属分类:
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
一所小小的竹子做成的房子,满屋挂满风铃,有一个茶几,坐落在山上。
回复
更多评论
IT新闻
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-03-18 23:29 编辑过
相关链接:
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理
相关文章:
设计模式学习笔记--观察者模式(Observer) (未完待续)
设计模式学习笔记--调停者模式(Mediator)
设计模式学习笔记--备忘录模式(Memento)
设计模式学习笔记--策略模式(待续)
设计模式学习笔记--模板方法(Template Method)模式
设计模式学习笔记--建造模式(Builder)
设计模式学习笔记--原型(Prototype)
《Java与模式》学习笔记(1)--模式的概念. 要素
<
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
錢為人用無需多,人為錢忙凈白忙
留言簿
(138)
给我留言
查看公开留言
查看私人留言
随笔分类
Ajax(2)
Ant(1)
Auto Code(4)
Cewolf
CMMI(1)
CSS(2)
CVS(1)
Design Pattern(8)
Eclipse BIRT
EJB
extremecomponents(1)
GIS(2)
Hibernate(8)
iBATIS(2)
IDE(1)
Inno Setup(2)
Java(23)
Javascript(25)
JBoss(1)
JFreeChart(2)
JFreeReport(2)
JSF
MySql(10)
Open Source(4)
Oracle(4)
Other(9)
Spring(12)
Sql Server(1)
Struts(7)
Struts2(8)
Tomcat
UML
Web(1)
Web Service(2)
Workflow
似水流年(35)
网络通信相关(9)
项目管理(4)
随笔档案
2008年9月 (3)
2008年8月 (1)
2008年6月 (2)
2008年5月 (3)
2008年4月 (2)
2008年2月 (2)
2008年1月 (12)
2007年12月 (10)
2007年11月 (13)
2007年10月 (11)
2007年9月 (13)
2007年8月 (26)
2007年7月 (12)
2007年6月 (3)
2007年5月 (4)
2007年4月 (23)
2007年3月 (32)
2007年2月 (26)
文章分类
喜爱歌词(12)
生活点滴(3)
芝麻粒知识(8)
英语(1)
相册
java学习相关
other
好友照片
日历
流逝的青春
设计模式相关
走走拍拍
关注blog
atomic_age
BeanSoft
echoheart2008
JAVA-HE
kenzhang
坏男孩
干儿子——子源
施伟
蚂蚁
鼠标
积分与排名
积分 - 250798
排名 - 25
最新评论
1. re: Oracal的Lpad函数
這個解釋好
--ff
2. re: 【转】Google Earth的KML语法
看你学的相当光啊,是不是也是GIS专业的啊,呵呵。感觉像是WEBGIS方向哦
--GISFMan
3. re: 笔记本触摸屏失效解决[未登录]
找了两天,多谢多谢!
--sun
4. re: 【MySql异常备忘】往自建log表插入数据出现ERROR 1064问题
我也碰到这个问题, log不能作表名,改logs正常!
--wv1124
5. re: 笔记本触摸屏失效解决
我的也是acer,同样的问题,果然是这样,谢谢哈!
--510322
评论排行榜
1. 使用XFire+Spring构建Web Service(二)(59)
2. 通用权限管理系统设计篇(三)——概要设计说明书(46)
3. 使用XFire+Spring构建Web Service(一)——helloWorld篇(35)
4. 通用权限管理设计篇(二)——数据库设计(25)
5. 用JFreeChart增强JSP报表的用户体验(24)