合工大很牛很牛牛
BlogJava
::
首頁
::
聯(lián)系
::
聚合
::
管理
14 Posts :: 1 Stories :: 37 Comments :: 0 Trackbacks
常用鏈接
我的隨筆
我的評論
我的參與
最新評論
留言簿
(1)
給我留言
查看公開留言
查看私人留言
我參與的團(tuán)隊(duì)
隨筆分類
算法——二叉樹
設(shè)計(jì)模式(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 狀態(tài)模式
評論內(nèi)容較長,點(diǎn)擊標(biāo)題查看
--zdcin
3.?re: Observer Pattern 觀察者模式
看看head first design pattern會發(fā)現(xiàn)雷同得不得了
如果本文作者做的工作只是翻譯 請說明 以免混淆
--zkenshin
4.?re: State Pattern 狀態(tài)模式[未登錄]
這樣的爛東西不要放上來,浪費(fèi)大家的時間
--aa
5.?re: 命令模式 Command Pattern
Thank you!
--skk
閱讀排行榜
1.?State Pattern 狀態(tài)模式(2861)
2.?工廠方法 Factory Method(2491)
3.?命令模式 Command Pattern(2370)
4.?Iterator Pattern(1926)
5.?Observer Pattern 觀察者模式(1647)
評論排行榜
1.?State Pattern 狀態(tài)模式(8)
2.?工廠方法 Factory Method(8)
3.?Facade Pattern(6)
4.?命令模式 Command Pattern(4)
5.?template pattern(3)
工廠方法 Factory Method
Factory Methord的目的就是在“封裝對象的創(chuàng)建”的基礎(chǔ)上(simple factory, factory methord, abstract factory的前提都是封裝對象的創(chuàng)建),
讓子類來決定對象被如何創(chuàng)建
。對比simple factory 是用一個與之a(chǎn)ssciation的新造的類來專門決定對象該如何被創(chuàng)建,具體見前文《簡單工廠》。
仍然是用PizzaStore為例:注意下面的PizzaStore中的createPizza()方法是抽象方法,執(zhí)行過程有子類來決定!而PizzaStore也因此而是抽象類。
通過NYPizzaStore來創(chuàng)建一個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
事實(shí)上,所謂的Factory Methord講白了就是:有些事情,父類故意不干事,讓給子類去干。
簡化的UML如下:
posted on 2008-05-21 22:47
化的了
閱讀(2491)
評論(8)
編輯
收藏
所屬分類:
設(shè)計(jì)模式
Feedback
#
re: 工廠方法 Factory Methord
2008-05-21 23:46
Anchor
你好!很高興看到你的這篇文章..最近也在學(xué)這個東東..希望能共同學(xué)習(xí)..共同交流..我的QQ是494229399
回復(fù)
更多評論
#
re: 工廠方法 Factory Methord
2008-05-22 08:53
ehuan
為什么用的是抽象類,而不是接口?有什么好處嗎?
一般書上都是建議用接口,或者再讓抽象類繼承接口。
回復(fù)
更多評論
#
re: 工廠方法 Factory Methord[未登錄]
2008-05-22 10:37
stone7
請問你的UML圖用什么工具畫的?
回復(fù)
更多評論
#
re: 工廠方法 Factory Methord
2008-05-22 15:19
化的了
@ehuan
接口在英文是interface,其實(shí)在設(shè)計(jì)模式里,java中的abstract class和 interface 都是一種抽象方式。
《head first design pattern》里面把抽象出來的東西都叫做interface,也就說interface是一種方式(把interface理解成為一種概念而不是java的關(guān)鍵字),它包括抽象類和接口。
具體情況時改用抽象類還是接口,要根據(jù)上下文環(huán)境來決定。因?yàn)閖ava里,可以implement多個接口,卻只能extends 一個類。
中文書有的可能翻譯的不好,或者有的作者就沒明白這個道理,所以把抽象類和接口在設(shè)計(jì)模式內(nèi)分得很細(xì)
不曉得我說的話可夠明白。
@stone7
uml 是用netbeans里面的uml工具畫的。eclipse的uml2插件實(shí)在沒它用的爽。
回復(fù)
更多評論
#
re: 工廠方法 Factory Methord[未登錄]
2008-05-22 18:37
apple0668
nb畫的UML顏色搭配不錯,netbeans很好很強(qiáng)大,做得越來越專業(yè)了。
回復(fù)
更多評論
#
re: 工廠方法 Factory Methord
2008-05-28 18:31
wenlin
Factory Methord?
Factory Method
回復(fù)
更多評論
#
re: 工廠方法 Factory Methord
2008-05-30 18:04
化的了
@wenlin
thanks
回復(fù)
更多評論
#
re: 工廠方法 Factory Method
2008-08-06 16:03
chenlh
代碼少了
NYCheesePizza
NYClamPizza
回復(fù)
更多評論
新用戶注冊
刷新評論列表
只有注冊用戶
登錄
后才能發(fā)表評論。
網(wǎng)站導(dǎo)航:
博客園
IT新聞
Chat2DB
C++博客
博問
管理
相關(guān)文章:
Observer Pattern 觀察者模式
Composite Pattern
State Pattern 狀態(tài)模式
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
主站蜘蛛池模板:
无码国产精品一区二区免费式直播
|
看全色黄大色大片免费久久
|
亚洲va精品中文字幕
|
日韩免费a级在线观看
|
中文字幕在线视频免费
|
亚洲白嫩在线观看
|
亚洲不卡AV影片在线播放
|
人人狠狠综合久久亚洲高清
|
亚洲A∨午夜成人片精品网站
|
三级网站免费观看
|
国产精品亚洲午夜一区二区三区
|
亚洲成a人片在线观看老师
|
久久国产免费观看精品3
|
国产成人亚洲综合a∨
|
亚洲高清日韩精品第一区
|
国产一级高清免费观看
|
亚洲a一级免费视频
|
亚洲av纯肉无码精品动漫
|
亚洲黄色网站视频
|
亚洲伊人久久成综合人影院
|
free哆拍拍免费永久视频
|
亚洲人成电影在在线观看网色
|
好吊妞在线新免费视频
|
日韩电影免费在线观看
|
在线观看亚洲视频
|
亚洲国产电影在线观看
|
亚洲精品国产美女久久久
|
国产免费小视频在线观看
|
亚洲三级在线免费观看
|
美女视频黄的免费视频网页
|
自拍偷自拍亚洲精品播放
|
亚洲理论在线观看
|
人人狠狠综合久久亚洲婷婷
|
亚洲国产精品不卡毛片a在线
|
国产v精品成人免费视频400条
|
国产午夜无码精品免费看动漫
|
国产黄在线播放免费观看
|
丰满亚洲大尺度无码无码专线
|
亚洲欧洲精品久久
|
久久夜色精品国产噜噜噜亚洲AV
|
亚洲中文字幕无码一久久区
|