摘要:客戶端抽象工廠模式概念抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。為了方便引進(jìn)抽象工廠模式,引進(jìn)一個新概念產(chǎn)品族。具體產(chǎn)品角色抽象工廠模式所創(chuàng)建的任何產(chǎn)品對象都是某一個具體產(chǎn)品類的實(shí)例。
簡單工廠模式
1、概念:簡單工廠模式其實(shí)不是一個設(shè)計模式,反而比較像一種編程習(xí)慣。主要我們定義一個非常簡單的類主要負(fù)責(zé)幫我們生產(chǎn)不同的產(chǎn)品。類圖如下:
客戶端通過簡單工廠可以生產(chǎn)出具體產(chǎn)品A,具體產(chǎn)品B,具體產(chǎn)品C。
2、實(shí)例:
簡單工廠:
package my.oschina.net.design.factory; public class SimplePizzaFactory { /** * 根據(jù)傳入的type參數(shù),返回相應(yīng)的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里有一個簡單工廠,當(dāng)我們需要什么pizza的時候,告訴簡單工廠,它會為我們生產(chǎn)。
package my.oschina.net.design.factory; public class PizzaStore { //通過組合的使用,加上一個簡單工廠SimplePizzaFactory的引用,用于創(chuàng)建pizza SimplePizzaFactory factory; public PizzaStore(SimplePizzaFactory factory) { this.factory = factory; } public Pizza orderPizza(String type) { Pizza pizza; //調(diào)用簡單工廠SimplePizzaFactory的createPizza(type)方法創(chuàng)建pizza pizza = factory.createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } }工廠方法模式
1、概念:這個和簡單工廠有區(qū)別,簡單工廠模式只有一個工廠,工廠方法模式對每一個產(chǎn)品都有相應(yīng)的工廠。
構(gòu)建一個工廠的時候,實(shí)際上是構(gòu)建一個具體的子類對象,讓子類決定去生產(chǎn)什么產(chǎn)品。
2、實(shí)例:
構(gòu)建兩個工廠,一個芝加哥pizza工廠,一個紐約pizza工廠。去生產(chǎn)芝加哥風(fēng)味的pizza以及紐約風(fēng)味的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、概念:抽象工廠模式是所有形態(tài)的工廠模式中最為抽象和最具一般性的一種形態(tài)。為了方便引進(jìn)抽象工廠模式,引進(jìn)一個新概念:產(chǎn)品族(Product Family)。所謂產(chǎn)品族,是指位于不同產(chǎn)品等級結(jié)構(gòu),功能相關(guān)聯(lián)的產(chǎn)品組成的家族。如圖:
圖中一共有四個產(chǎn)品族,分布于三個不同的產(chǎn)品等級結(jié)構(gòu)中。只要指明一個產(chǎn)品所處的產(chǎn)品族以及它所屬的等級結(jié)構(gòu),就可以唯一的確定這個產(chǎn)品。
引進(jìn)抽象工廠模式
所謂的抽象工廠是指一個工廠等級結(jié)構(gòu)可以創(chuàng)建出分屬于不同產(chǎn)品等級結(jié)構(gòu)的一個產(chǎn)品族中的所有對象。如果用圖來描述的話,如下圖:
2、抽象工廠模式的結(jié)構(gòu):
圖中描述的東西用產(chǎn)品族描述如下:
抽象工廠(Abstract Factory)角色:擔(dān)任這個角色的是工廠方法模式的核心,它是與應(yīng)用系統(tǒng)商業(yè)邏輯無關(guān)的。
具體工廠(Concrete Factory)角色:這個角色直接在客戶端的調(diào)用下創(chuàng)建產(chǎn)品的實(shí)例。這個角色含有選擇合適的產(chǎn)品對象的邏輯,而這個邏輯是與應(yīng)用系統(tǒng)的商業(yè)邏輯緊密相關(guān)的。
抽象產(chǎn)品(Abstract Product)角色:擔(dān)任這個角色的類是工廠方法模式所創(chuàng)建的對象的父類,或它們共同擁有的接口。
具體產(chǎn)品(Concrete Product)角色:抽象工廠模式所創(chuàng)建的任何產(chǎn)品對象都是某一個具體產(chǎn)品類的實(shí)例。這是客戶端最終需要的東西,其內(nèi)部一定充滿了應(yīng)用系統(tǒng)的商業(yè)邏輯。
參考:https://blog.csdn.net/ipqxian...
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/69092.html
摘要:抽象工廠模式可以向客戶端提供一個接口,使客戶端在不必指定產(chǎn)品的具體的情況下,創(chuàng)建多個產(chǎn)品族中的產(chǎn)品對象。前邊的兩個都是直接生產(chǎn)實(shí)例的,開始以為抽象工廠也是但是后來發(fā)現(xiàn)抽象工廠更像是生產(chǎn)工廠,其實(shí)抽象工廠其實(shí)是實(shí)現(xiàn)子類繼承父類的方法。 創(chuàng)建型模式 創(chuàng)建型模式是對一個類的實(shí)例化過程進(jìn)行了抽象,把對象的創(chuàng)建和對象的使用進(jìn)行了分離 上一篇介紹了下單例模式,這一篇介紹一下工廠模式和抽象工廠模式,...
摘要:簡單工廠模式的實(shí)質(zhì)是由一個工廠類根據(jù)傳入的參數(shù),動態(tài)決定應(yīng)該創(chuàng)建哪一個產(chǎn)品類。中的就是簡單工廠模式的體現(xiàn),根據(jù)傳入一個唯一的標(biāo)識來獲得對象,但是否是在傳入?yún)?shù)后創(chuàng)建還是傳入?yún)?shù)前創(chuàng)建這個要根據(jù)具體情況來定。 Spring中常用的設(shè)計模式 常用的設(shè)計模式(23種)如下 創(chuàng)建型: 工廠方法模式Factory Method,抽象工廠模式Abstract Factory 建造者...
摘要:原文鏈接常用設(shè)計模式設(shè)計模式設(shè)計模式是一種在長時間的經(jīng)驗(yàn)與錯誤中總結(jié)出來可服用的解決方案。用來模擬接口的相關(guān)操作我很帥通過適配器函數(shù)來調(diào)用目的我很帥學(xué)習(xí)資料聽飛狐聊設(shè)計模式系列設(shè)計模式湯姆大叔 原文鏈接: JavaScript常用設(shè)計模式 設(shè)計模式 設(shè)計模式是一種在長時間的經(jīng)驗(yàn)與錯誤中總結(jié)出來可服用的解決方案。 設(shè)計模式主要分為3類: 創(chuàng)建型設(shè)計模式:專注于處理對象的創(chuàng)建 Const...
閱讀 2890·2021-10-21 09:38
閱讀 2789·2021-10-11 10:59
閱讀 3113·2021-09-27 13:36
閱讀 1704·2021-08-23 09:43
閱讀 832·2019-08-29 14:14
閱讀 3063·2019-08-29 12:13
閱讀 3228·2019-08-29 12:13
閱讀 334·2019-08-26 12:24