摘要:工廠方法模式和策略的模式有什么區別區別在于,策略模式強調的是提供不同的策略方案,而工廠方法模式強調的是產品本身。
女朋友dodo鬧脾氣,氣勢洶洶的說“我要吃雪糕”。筆者心里啊樂滋滋的,一支雪糕就能哄回來,不亦樂乎?!
但是,雪糕買回來了,她竟然說“不想吃雪糕了,突然想吃披薩”。呵呵了,憋了一股勁“沒問題”,又屁顛屁顛的去把披薩買回來。
世事難料,dodo同學又放大招了,“披薩太上火了,我要吃芝士蛋糕”。
這時候,工廠方法模式該上場了,使用它可以完美的解決不斷的產品變更。工廠方法模式是怎么樣的?而工廠模式又是怎樣解決產品變更呢?一起來看看...
一、工廠方法模式 定義??定義一個創建對象的工廠接口,工廠方法將實例化推遲到子類中。
定義總是抽象的,先放出工廠方法模式的UML圖如下所示:
從上圖可以看出,工廠方法模式涉及到以下四個角色的概念:
??- 抽象工廠角色:工廠方法模式的核心,創建產品的工廠類必須實現該接口。
??- 具體工廠角色:該角色實現了抽象工廠接口,具體如何創建產品類就是在該實現類完成。
??- 抽象產品角色:所有產品類的超類,負責實現產品共性的抽象定義。
??- 具體產品角色:該角色實現了抽象產品接口,負責具體的不同產品業務邏輯。
二、實戰 上代碼抽象工廠角色代碼如下:
public interface Factory { // 傳入參數的是產品類型,這里返回產品類的抽象工廠類Product public Product factory(String productType); }
這里做出生產雪糕、披薩的工廠,有了工廠才能生產對應的產品,具體工廠角色代碼如下:
// 雪糕的工廠,負責生產雪糕 public class IceCreamFactory implements Factory { @Override public Product factory() { return new IceCream(); } }
上面看到抽象角色Product,看代碼:
public interface Product { public void product(); }
具體角色代碼如下:
public class IceCream implements Product { @Override public void product() { /** * 具體的業務邏輯 */ System.out.println("雪糕做好了!!"); } }
OK,涉及到工廠方式模式系統的代碼基本完成,下面看看客戶端怎么使用工廠模式,雪糕準備就緒:
public class Client { public static void main(String[] args){ // 生產雪糕 Factory iceCreamFactory = new IceCreamFactory(); Product iceCream = iceCreamFactory.factory(); iceCream.product(); } }
運行客戶端代碼,結果如下:
雪糕做好了!!擴展
雪糕的order已經完成!雪糕不吃,吃披薩?OK,現在就做披薩。同樣的先實現抽象工廠和抽象產品角色。
披薩工廠實現如下:
// 披薩的工廠,負責生產披薩 public class PizzaFactory implements Factory { @Override public Product factory() { return new Pizza(); } }
接下來就是披薩:
public class Pizza implements Product { @Override public void product() { /** * 具體的業務邏輯 */ System.out.println("披薩做好了!!"); } }
現在我們在客戶端中實現生產披薩,代碼如下:
public class Client { public static void main(String[] args){ // 生產雪糕 Factory iceCreamFactory = new IceCreamFactory(); Product iceCream = iceCreamFactory.factory(); iceCream.product(); // 生產披薩 Factory pizzaFactory = new PizzaFactory(); Product pizza = pizzaFactory.factory(); pizza.product(); } }
運行結果如下:
雪糕做好了!!三、工廠方法模式的優缺點 優點披薩做好了!!
1)優秀的擴展性。假如披薩不想吃了,想吃芝士蛋糕,只需要增加芝士蛋糕的具體工廠和具體產品類,不會影響其他產品的生產。
2)大降低代碼的耦合度,客戶端最終得到的是產品本身,而不需要知道和操作產品的生產過程。
缺點1)增加新產品時,需要增加具體的工廠類和具體的產品類,當產品數量多的時候就會造成系統的復雜度增大,也增加了對系統理解的難度。
四、比較跟策略模式對比:問得最多的一個問題。工廠方法模式和策略的模式有什么區別?區別在于,策略模式強調的是提供不同的策略方案,而工廠方法模式強調的是產品本身。
策略模式接下來也會說到,把策略模式吃透了,回頭再跟工廠方法模式對比的時候就恍然大悟了。
總結首先,上一篇的單例模式很多人都給我提了很不錯的建議,也在這篇文章中改進了。工廠方式模式的使用率也非常高,掌握它對把握系統架構會有比較大的提升。下一篇要分享的是:建造者模式
設計模式Java源碼GitHub下載:https://github.com/jetLee92/DesignPattern
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/67900.html
摘要:孫臏心里一萬個草泥馬在奔騰,差點沒噎死自己滾一邊去,我們這盤跟他賽馬開始,策略模式上場。在設計模式之禪中的提出通過策略枚舉和反射機制對策略模式進行改良,膜拜了但是要添加或淘汰策略,還是得去對枚舉進行修改,也不符合開閉原則。 今天給大家說說田忌賽馬的故事。如有雷同,純屬巧合!話說在戰國時期,群雄割據,硝煙四起,茶余飯后還是少不了娛樂活動的,其中賽馬是最火爆的。一天,孫臏看到田忌像個死雞似...
摘要:我認為按書上的順序比較好理解因為簡單靜態工廠模式是在工廠方法模式上縮減,抽象工廠模式是在工廠方法模式上再增強。所以我就先講工廠方法模式了。抽象工廠模式抽象工廠模式就比較復雜了,我們一般的應用都寫不到。 前言 只有光頭才能變強 回顧前面: 給女朋友講解什么是代理模式 包裝模式就是這么簡單啦 單例模式你會幾種寫法? 昨天寫了單例模式了,今天是時候寫工廠模式啦~ 工廠模式我個人認為其實比...
摘要:汽車本身就是復雜產品對象,其制造過程可以形象的表示建造者模式。另一輛法拉利,。法拉利具體建造者代碼如下構造法拉利的第一部分。咻咻法拉利已造好三建造者模式的優缺點優點降低代碼耦合度。 在未上大學之前,一直有個夢想I have a dream!,就是能成為一位汽車工程師,一直幻想著開著自己設計的汽車飛奔在公路上,迷倒了萬千少女。咳咳~~雖然現在沒實現我的dream,但夢想還是得有的。 說到...
閱讀 3023·2021-09-22 14:59
閱讀 1863·2021-09-22 10:02
閱讀 2108·2021-09-04 16:48
閱讀 2260·2019-08-30 15:53
閱讀 2965·2019-08-30 11:27
閱讀 3402·2019-08-29 18:35
閱讀 959·2019-08-29 17:07
閱讀 2669·2019-08-29 13:27