我的漫漫程序之旅
专注于JavaWeb开发
Builder设计模式的学习
对于
Builder模式
很简单,但是一直想不明白为什么要这么设计,为什么要向builder要Product而不是向知道建造过程的Director要。刚才google到一篇文章,总算清楚了。在这里转贴一下这位
richardluo的比喻
。
简单地说,就好象我要一座房子住,可是我不知道怎么盖(简单的砌墙,层次较低),也不知道怎么样设计(建几个房间,几个门好看,层次较高),于是我需要找一帮
民工,他们会砌墙
,还得找个
设计师,他知道怎么设计
,我还要确保
民工听设计师的领导
,而设计师本身也不干活,光是下命令,这里砌一堵墙,这里砌一扇门,这样民工开始建设,最后,我可以向民工要房子了。在这个过程中,
设计师是什么也没有,除了他在脑子里的设计和命令,所以要房子也是跟民工要
,记住了!
以下是richardluo的代码,我根据他的思路加上了相应的注释。
1,定义工人接口
,就是能够完成建造房子任务的人的通用要求。
//
工人接口,定义了各个工人所要进行的工所作。他们负责进行具体部件如窗户,地板的建造。
//
同时因为房子是民工建的,因此建设完成后由他把房子递交回房主
public
interface
Builder
{
public
void
makeWindow();
public
void
makeFloor();
public
Room getRoom();
}
2,定义设计师
,他的职责是指挥房主指派给他的工人按照自己的设计意图建造房子。
//
设计师。他知道房子应该怎么设计,但他不会自己去建造,而是指挥民工去建造。
public
class
Designer
{
//
指挥民工进行工作
public
void
order(Builder builder)
{
builder.makeWindow();
builder.makeFloor();
}
}
3,民工
,他负责具体事物的实施。
//
民工。负责进行具体部件如窗户,地板的建造。
//
同时因为房子是民工建的,因此建设完成后由他把房子递交回房主
public
class
Mingong
implements
Builder
{
private
String window
=
""
;
private
String floor
=
""
;
public
void
makeWindow()
{
window
=
new
String(
"
window
"
);
}
public
void
makeFloor()
{
floor
=
new
String(
"
floor
"
);
}
//
回交房子给房主
public
Room getRoom()
{
if
((
!
window.equals(
""
))
&&
(
!
floor.equals(
""
)))
{
System.out.println(
"
room ready!
"
);
return
new
Room();
}
else
return
null
;
}
}
4,房主
,就是雇人,收房。
//
房主。房主的任务就是聘请一个民工,一个设计师,同时把民工给设计师指挥,督促设计师开展工作。最后从民工手上收房。
public
class
Client
{
public
static
void
main(String[] args)
{
Builder mingong
=
new
Mingong();
Designer designer
=
new
Designer();
designer.order(mingong);
mingong.getRoom();
}
}
5.房子类:
public
class
Room
{
public
Room()
{
System.out.println(
"
房子造好了
"
);
}
}
posted on 2008-05-23 17:18
々上善若水々
阅读(87)
评论(0)
编辑
收藏
所属分类:
设计模式
IT新闻
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
相关文章:
设计模式之学习 Memento模式
Flyweight模式 的学习
Java设计模式之Facade模式
java设计模式之Bridge
Java Prototype模式的学习(原型模式)
装饰者模式(Decorator)浅谈与剖析
学习装饰者模式(Decorator)
Java 观察者模式的浅析
Deafult Adapter的学习
Builder设计模式的学习
相关链接:
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理
导航
首页
新随笔
联系
管理
<
2008年12月
>
日
一
二
三
四
五
六
30
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
8
9
10
统计
随笔 - 21
文章 - 279
评论 - 140
引用 - 0
留言簿
(12)
给我留言
查看公开留言
查看私人留言
随笔档案
(24)
2008年11月 (3)
2008年9月 (2)
2008年8月 (1)
2008年7月 (2)
2008年6月 (2)
2008年5月 (9)
2008年4月 (2)
2007年12月 (3)
文章分类
(277)
AJAX(7)
(rss)
Hibernate(3)
(rss)
J2ME(2)
(rss)
J2SE(36)
(rss)
JavaScript(57)
(rss)
JavaWeb(24)
(rss)
Java笔试与面试(52)
(rss)
opensource(13)
(rss)
Spring(9)
(rss)
SSH整合系列(2)
(rss)
Struts1.x(3)
(rss)
Struts2(11)
(rss)
WebService(14)
(rss)
数据库(10)
(rss)
数据结构与算法(7)
(rss)
设计模式(17)
(rss)
软件测试(10)
(rss)
文章档案
(228)
2008年12月 (1)
2008年11月 (4)
2008年10月 (2)
2008年9月 (2)
2008年8月 (10)
2008年7月 (22)
2008年6月 (13)
2008年5月 (45)
2008年4月 (17)
2008年3月 (5)
2008年2月 (11)
2008年1月 (27)
2007年12月 (45)
2007年11月 (24)
搜索
最新评论
1. re: javascript文件夹选择框的两种解决方案
我用了第一中方法。可是还有一个问题,就是选择了远程计算机上的文件夹,怎么获得全路径?
--justin
2. re: Flash图表(FusionChartsV3)的简单应用
就是说网页上有多个图表,当页面加载时所有动画效果已经完成,下边的图表无法看到动画的效果,只是个最终的结果,如果有循环控制的话就可以看到下边的图表时仍然可以看到动画效果,也相当于不断刷新自己吧!谢谢
--左
3. re: Flash图表(FusionChartsV3)的简单应用
不明白你说的什么意思,不断刷新Chart自己?
--々上善若水々
4. re: Flash图表(FusionChartsV3)的简单应用
请问一下楼主,如何让FusionCharts生成的图表在网页上循环播放啊,谢谢!!!
--左
5. re: Struts1.2实现单文件上传
方法太牛比了。mail:yaoyao19851023@163.com
--yaoyao
阅读排行榜
1. 一道Struts面试题(3009)
2. javascript文件夹选择框的两种解决方案(2294)
3. ExtJS & GTGrid 简单用户管理(1833)
4. jexcelapi使用小记(1748)
5. Flash图表(FusionChartsV3)的简单应用 (1704)
评论排行榜
1. Flash图表(FusionChartsV3)的简单应用 (19)
2. [原创]J2ME/J2EE实现用户登录交互(7)
3. Flash图片轮换显示的效果抽取(7)
4. ExtJS & GTGrid 简单用户管理(6)
5. StringBuffer和StringBuilder添加null值的误导(5)