合工大很牛很牛牛
BlogJava
::
首页
::
联系
::
聚合
::
管理
14 Posts :: 1 Stories :: 37 Comments :: 0 Trackbacks
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(1)
给我留言
查看公开留言
查看私人留言
我参与的团队
随笔分类
算法——二叉树
设计模式(12)
随笔档案
2008年7月 (10)
2008年6月 (1)
2008年5月 (4)
搜索
最新评论
1. re: 命令模式 Command Pattern[未登录]
nice article, but your English is not good enough.
--cc
2. re: State Pattern 状态模式
评论内容较长,点击标题查看
--zdcin
3. re: Observer Pattern 观察者模式
看看head first design pattern会发现雷同得不得了
如果本文作者做的工作只是翻译 请说明 以免混淆
--zkenshin
4. re: State Pattern 状态模式[未登录]
这样的烂东西不要放上来,浪费大家的时间
--aa
5. re: 命令模式 Command Pattern
Thank you!
--skk
阅读排行榜
1. State Pattern 状态模式(2850)
2. 工厂方法 Factory Method(2482)
3. 命令模式 Command Pattern(2359)
4. Iterator Pattern(1916)
5. Observer Pattern 观察者模式(1636)
评论排行榜
1. State Pattern 状态模式(8)
2. 工厂方法 Factory Method(8)
3. Facade Pattern(6)
4. 命令模式 Command Pattern(4)
5. template pattern(3)
工厂方法 Factory Method
Factory Methord的目的就是在“封装对象的创建”的基础上(simple factory, factory methord, abstract factory的前提都是封装对象的创建),
让子类来决定对象被如何创建
。对比simple factory 是用一个与之assciation的新造的类来专门决定对象该如何被创建,具体见前文《简单工厂》。
仍然是用PizzaStore为例:注意下面的PizzaStore中的createPizza()方法是抽象方法,执行过程有子类来决定!而PizzaStore也因此而是抽象类。
通过NYPizzaStore来创建一个NYCheesePizza的时序图如下:
具体代码如下:
1
package
javaapplication18;
2
3
public
class
Main
4
{
5
6
public
static
void
main(String[] args)
7
{
8
PiszzaStore store
=
new
NYPizzaStore();
9
store.createPizza(
"
CheesePizza
"
);
10
store.orderPizza();
11
}
12
}
13
1
package
javaapplication18;
2
3
public
abstract
class
PiszzaStore
4
{
5
6
Pizza mPizza;
7
8
public
PiszzaStore()
9
{
10
}
11
12
public
abstract
Pizza createPizza(String pizzaName);
13
14
public
Pizza orderPizza()
15
{
16
mPizza.prepare();
17
mPizza.bake();
18
mPizza.cut();
19
mPizza.box();
20
return
mPizza;
21
}
22
}
23
24
1
package
javaapplication18;
2
3
public
class
NYPizzaStore
extends
PiszzaStore
4
{
5
6
public
NYPizzaStore()
7
{
8
}
9
10
public
Pizza createPizza(String pizzaName)
11
{
12
if
(pizzaName.equals(
"
CheesePizza
"
))
13
{
14
mPizza
=
new
NYCheesePizza();
15
System.out.println(
"
NY CheesePizza created.
"
);
16
return
mPizza;
17
}
18
else
if
(pizzaName.equals(
"
ClamPizza
"
))
19
{
20
mPizza
=
new
NYClamPizza();
21
System.out.println(
"
NY ClamPizza created.
"
);
22
return
mPizza;
23
}
24
return
null
;
25
}
26
}
27
28
1
package
javaapplication18;
2
3
public
class
Pizza
4
{
5
6
public
Pizza()
7
{
8
}
9
10
public
void
prepare()
11
{
12
System.out.println(
"
pizza prepared
"
);
13
}
14
15
public
void
bake()
16
{
17
System.out.println(
"
pizza baked
"
);
18
}
19
20
public
void
cut()
21
{
22
System.out.println(
"
pizza cut
"
);
23
}
24
25
public
void
box()
26
{
27
System.out.println(
"
pizza boxed
"
);
28
}
29
}
30
31
事实上,所谓的Factory Methord讲白了就是:有些事情,父类故意不干事,让给子类去干。
简化的UML如下:
posted on 2008-05-21 22:47
化的了
阅读(2482)
评论(8)
编辑
收藏
所属分类:
设计模式
Feedback
#
re: 工厂方法 Factory Methord
2008-05-21 23:46
Anchor
你好!很高兴看到你的这篇文章..最近也在学这个东东..希望能共同学习..共同交流..我的QQ是494229399
回复
更多评论
#
re: 工厂方法 Factory Methord
2008-05-22 08:53
ehuan
为什么用的是抽象类,而不是接口?有什么好处吗?
一般书上都是建议用接口,或者再让抽象类继承接口。
回复
更多评论
#
re: 工厂方法 Factory Methord[未登录]
2008-05-22 10:37
stone7
请问你的UML图用什么工具画的?
回复
更多评论
#
re: 工厂方法 Factory Methord
2008-05-22 15:19
化的了
@ehuan
接口在英文是interface,其实在设计模式里,java中的abstract class和 interface 都是一种抽象方式。
《head first design pattern》里面把抽象出来的东西都叫做interface,也就说interface是一种方式(把interface理解成为一种概念而不是java的关键字),它包括抽象类和接口。
具体情况时改用抽象类还是接口,要根据上下文环境来决定。因为java里,可以implement多个接口,却只能extends 一个类。
中文书有的可能翻译的不好,或者有的作者就没明白这个道理,所以把抽象类和接口在设计模式内分得很细
不晓得我说的话可够明白。
@stone7
uml 是用netbeans里面的uml工具画的。eclipse的uml2插件实在没它用的爽。
回复
更多评论
#
re: 工厂方法 Factory Methord[未登录]
2008-05-22 18:37
apple0668
nb画的UML颜色搭配不错,netbeans很好很强大,做得越来越专业了。
回复
更多评论
#
re: 工厂方法 Factory Methord
2008-05-28 18:31
wenlin
Factory Methord?
Factory Method
回复
更多评论
#
re: 工厂方法 Factory Methord
2008-05-30 18:04
化的了
@wenlin
thanks
回复
更多评论
#
re: 工厂方法 Factory Method
2008-08-06 16:03
chenlh
代码少了
NYCheesePizza
NYClamPizza
回复
更多评论
新用户注册
刷新评论列表
只有注册用户
登录
后才能发表评论。
网站导航:
博客园
IT新闻
Chat2DB
C++博客
博问
管理
相关文章:
Observer Pattern 观察者模式
Composite Pattern
State Pattern 状态模式
Iterator Pattern
template pattern
Facade Pattern
配件模式 Decorator Pattern
适配器模式 Adapter Pattern
命令模式 Command Pattern
工厂方法 Factory Method
Copyright @ 化的了
Powered by:
.Text
and
ASP.NET
Theme by:
.NET Monster