合工大很牛很牛牛
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 狀態模式(2870)
2.?工廠方法 Factory Method(2499)
3.?命令模式 Command Pattern(2383)
4.?Iterator Pattern(1932)
5.?Observer Pattern 觀察者模式(1656)
評論排行榜
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
化的了
閱讀(2499)
評論(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
主站蜘蛛池模板:
青青草原亚洲视频
|
亚洲另类激情综合偷自拍图
|
午夜一级免费视频
|
亚洲日韩精品一区二区三区
|
在线观看免费黄网站
|
波多野结衣中文字幕免费视频
|
亚洲成a人一区二区三区
|
中文字幕在线观看亚洲
|
一二三四在线观看免费中文在线观看
|
亚洲一区二区三区免费在线观看
|
中文字幕不卡亚洲
|
曰批视频免费40分钟试看天天
|
成人免费午夜在线观看
|
亚洲人成网站在线播放vr
|
国产精品免费久久久久影院
|
午夜dj免费在线观看
|
久久亚洲AV成人无码国产最大
|
免费国产作爱视频网站
|
亚洲精品V欧洲精品V日韩精品
|
国产免费拔擦拔擦8X高清在线人
|
四虎永久在线精品视频免费观看
|
亚洲国产精品美女
|
免费A级毛片无码专区
|
久久久久国产亚洲AV麻豆
|
国产亚洲Av综合人人澡精品
|
在线观看无码的免费网站
|
亚洲国产精品综合久久2007
|
天天操夜夜操免费视频
|
日韩成人毛片高清视频免费看
|
国产精品极品美女免费观看
|
中文字幕免费在线看线人动作大片
|
女人18特级一级毛片免费视频
|
亚洲va成无码人在线观看
|
国产免费一区二区三区在线观看
|
自怕偷自怕亚洲精品
|
热久久精品免费视频
|
最近免费字幕中文大全
|
在线观看亚洲AV每日更新无码
|
免费在线视频你懂的
|
免费人成网站永久
|
亚洲综合激情视频
|