摘要:客戶端抽象工廠模式概念抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。為了方便引進抽象工廠模式,引進一個新概念產品族。具體產品角色抽象工廠模式所創建的任何產品對象都是某一個具體產品類的實例。
簡單工廠模式
1、概念:簡單工廠模式其實不是一個設計模式,反而比較像一種編程習慣。主要我們定義一個非常簡單的類主要負責幫我們生產不同的產品。類圖如下:
客戶端通過簡單工廠可以生產出具體產品A,具體產品B,具體產品C。
2、實例:
簡單工廠:
package my.oschina.net.design.factory; public class SimplePizzaFactory { /** * 根據傳入的type參數,返回相應的pizza * @param type * @return */ public Pizza createPizza(String type) { //一般這個方法為static Pizza pizza = null; if (type.equals("cheese")) { pizza = new CheesePizza(); } else if (type.equals("pepperoni")) { pizza = new PepperoniPizza(); } else if (type.equals("clam")) { pizza = new ClamPizza(); } else if (type.equals("veggie")) { pizza = new VeggiePizza(); } return pizza; } }
客戶端,想要建立一個pizza store,這個pizza store里有一個簡單工廠,當我們需要什么pizza的時候,告訴簡單工廠,它會為我們生產。
package my.oschina.net.design.factory; public class PizzaStore { //通過組合的使用,加上一個簡單工廠SimplePizzaFactory的引用,用于創建pizza SimplePizzaFactory factory; public PizzaStore(SimplePizzaFactory factory) { this.factory = factory; } public Pizza orderPizza(String type) { Pizza pizza; //調用簡單工廠SimplePizzaFactory的createPizza(type)方法創建pizza pizza = factory.createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } }工廠方法模式
1、概念:這個和簡單工廠有區別,簡單工廠模式只有一個工廠,工廠方法模式對每一個產品都有相應的工廠。
構建一個工廠的時候,實際上是構建一個具體的子類對象,讓子類決定去生產什么產品。
2、實例:
構建兩個工廠,一個芝加哥pizza工廠,一個紐約pizza工廠。去生產芝加哥風味的pizza以及紐約風味的pizza。
package my.oschina.net.design.factory; public class ChicagoPizzaStore extends PizzaStore { Pizza createPizza(String item) { if (item.equals("cheese")) { return new ChicagoStyleCheesePizza(); } else if (item.equals("veggie")) { return new ChicagoStyleVeggiePizza(); } else if (item.equals("clam")) { return new ChicagoStyleClamPizza(); } else if (item.equals("pepperoni")) { return new ChicagoStylePepperoniPizza(); } else return null; } } package my.oschina.net.design.factory; public class NYPizzaStore extends PizzaStore { Pizza createPizza(String item) { if (item.equals("cheese")) { return new NYStyleCheesePizza(); } else if (item.equals("veggie")) { return new NYStyleVeggiePizza(); } else if (item.equals("clam")) { return new NYStyleClamPizza(); } else if (item.equals("pepperoni")) { return new NYStylePepperoniPizza(); } else return null; } }
客戶端:
package my.oschina.net.design.factory; public class PizzaTestDrive { public static void main(String[] args) { PizzaStore nyStore = new NYPizzaStore(); PizzaStore chicagoStore = new ChicagoPizzaStore(); Pizza pizza = nyStore.orderPizza("cheese"); System.out.println("Ethan ordered a " + pizza.getName() + " "); pizza = chicagoStore.orderPizza("cheese"); System.out.println("Joel ordered a " + pizza.getName() + " "); pizza = nyStore.orderPizza("clam"); System.out.println("Ethan ordered a " + pizza.getName() + " "); pizza = chicagoStore.orderPizza("clam"); System.out.println("Joel ordered a " + pizza.getName() + " "); } }抽象工廠模式:
1、概念:抽象工廠模式是所有形態的工廠模式中最為抽象和最具一般性的一種形態。為了方便引進抽象工廠模式,引進一個新概念:產品族(Product Family)。所謂產品族,是指位于不同產品等級結構,功能相關聯的產品組成的家族。如圖:
圖中一共有四個產品族,分布于三個不同的產品等級結構中。只要指明一個產品所處的產品族以及它所屬的等級結構,就可以唯一的確定這個產品。
引進抽象工廠模式
所謂的抽象工廠是指一個工廠等級結構可以創建出分屬于不同產品等級結構的一個產品族中的所有對象。如果用圖來描述的話,如下圖:
2、抽象工廠模式的結構:
圖中描述的東西用產品族描述如下:
抽象工廠(Abstract Factory)角色:擔任這個角色的是工廠方法模式的核心,它是與應用系統商業邏輯無關的。
具體工廠(Concrete Factory)角色:這個角色直接在客戶端的調用下創建產品的實例。這個角色含有選擇合適的產品對象的邏輯,而這個邏輯是與應用系統的商業邏輯緊密相關的。
抽象產品(Abstract Product)角色:擔任這個角色的類是工廠方法模式所創建的對象的父類,或它們共同擁有的接口。
具體產品(Concrete Product)角色:抽象工廠模式所創建的任何產品對象都是某一個具體產品類的實例。這是客戶端最終需要的東西,其內部一定充滿了應用系統的商業邏輯。
參考:https://blog.csdn.net/ipqxian...
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/69092.html
摘要:抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產品的具體的情況下,創建多個產品族中的產品對象。前邊的兩個都是直接生產實例的,開始以為抽象工廠也是但是后來發現抽象工廠更像是生產工廠,其實抽象工廠其實是實現子類繼承父類的方法。 創建型模式 創建型模式是對一個類的實例化過程進行了抽象,把對象的創建和對象的使用進行了分離 上一篇介紹了下單例模式,這一篇介紹一下工廠模式和抽象工廠模式,...
摘要:簡單工廠模式的實質是由一個工廠類根據傳入的參數,動態決定應該創建哪一個產品類。中的就是簡單工廠模式的體現,根據傳入一個唯一的標識來獲得對象,但是否是在傳入參數后創建還是傳入參數前創建這個要根據具體情況來定。 Spring中常用的設計模式 常用的設計模式(23種)如下 創建型: 工廠方法模式Factory Method,抽象工廠模式Abstract Factory 建造者...
摘要:原文鏈接常用設計模式設計模式設計模式是一種在長時間的經驗與錯誤中總結出來可服用的解決方案。用來模擬接口的相關操作我很帥通過適配器函數來調用目的我很帥學習資料聽飛狐聊設計模式系列設計模式湯姆大叔 原文鏈接: JavaScript常用設計模式 設計模式 設計模式是一種在長時間的經驗與錯誤中總結出來可服用的解決方案。 設計模式主要分為3類: 創建型設計模式:專注于處理對象的創建 Const...
閱讀 2845·2021-10-21 09:38
閱讀 2751·2021-10-11 10:59
閱讀 3022·2021-09-27 13:36
閱讀 1649·2021-08-23 09:43
閱讀 791·2019-08-29 14:14
閱讀 3034·2019-08-29 12:13
閱讀 3203·2019-08-29 12:13
閱讀 310·2019-08-26 12:24