舉兩個例子以快速明白Java中的
簡單
工廠模式:
1、女媧摶土造人
話說:“天地開辟,未有人民,女媧摶土為人。”女媧需要用土造出一個個的人,但在女媧造出人之前,人的概念只存在于女媧的思想里面。
女媧造人,這就是簡單工廠模式的應用。
?
首先,在這個造人的思想里面,有幾個重要的角色:女媧本身、抽象的人的概念和女媧所造出的一個個具體的人。
1.)女媧是一個工廠類,也就是簡單工廠模式的核心角色。
????????2.)具休的一個個的人,包括張三,李四等。這些人便是簡單工廠模式里面的具體產品角色
3.)抽象的人是最早只存在于女媧的頭腦里的一個想法,女媧按照這個想法造出的一個個具體的人,便都符合這個抽象的人的定義。換言之,這個抽象的想法規定了所有具體的人必須都有的接口(特征或者功能)
其UML類圖出下所示:
理解了上面的這些東西,再來理解下面的例子,對照理解,相信看完這篇文章,便對java簡單工廠模式有一個很好的理解:
2、有一個農場公司,專門向市場銷售各類水果,在這個系統里需要描述下列水果:
葡萄 Grape
草莓 Stuawberry
蘋果 Apple
水果與其他植物不同,最終可以采摘食用,那么一個自然的做法是建立一個各種水果都適用的接口,以便與其他農場里的植物區分開來,
此時,則是為水果類聲明了一個接口,表現在代碼上:

?2 ?

?3 ?

?4 ?

?5 ?

?6 ?

?7 ?

?8 ?

?9 ?

10 ?

水果接口規定出所有的水果必須實現的接口,包括任何水果類必須具備的方法plant(),grow(),和harvest();
Apple類是水果類的一種,因此它實現了水果接口所聲明的所有方法。另處,由于蘋果是多年生植物,因此多出一個treeAge性質,描述蘋果的樹齡。代碼如下所示:






























同理,葡萄 Grape:































草莓 Stuawberry:




















農場園丁也是系統的一部分,由一個類來代表,FruitGardener類,代碼如下:















這時有人來果園玩,和園丁說,給我們介紹下你的水果吧。于是園丁:
















(注:以上代碼在JDK5.0,Myeclise3.2下編譯通過)
?
?類比兩個例子,園丁就相當于女媧,而水果就相當于具體的人,接口水果類就相當于存在于類女媧思想里的人的抽象概念。
由以上兩個例子可得出,簡單工廠模式需要由以下角色組成:
接口
????????????????????????接口的實現類(簡單工廠模式里面的具體產品角色)
????????????????????????工廠
理解了以下兩個例子,再來看第三個例子:
注意對比以下三個實例的不同
實例1:









































實例二:


























































實例三:




































































對比三個實例:
實例一,雖然實現了簡單工廠,但每次只能得到一種汽車,如果我們想換一種,就得修改工廠,太不方便,而實例二則改變了這種情況,便得我們可以按照我們的需要更換汽車,但我們所更換的汽車必須是實現類中有的,如果我們想要增加一種汽車的時候,我們還是得更改工廠,通過改進,實例三利用反射機制,得到汽車類型,這樣當我們需要增加一種新的汽車時,就無需要再修改工廠,而只需要增加要實現的類即可。也就是說要增加什么樣的汽車直接增加這個汽車的類即可,而無需改變工廠。從而達到了工廠分離的效果。?
(本文參考《java與模式》及〈浪曦〉視頻教程,并引用了相關實例)
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
