摘要:工廠方法定義定義一個創(chuàng)建對象的接口,但讓實(shí)現(xiàn)這個接口的類決定實(shí)例化哪個類,工廠方法讓類的實(shí)例化推遲到子類中進(jìn)行。優(yōu)點(diǎn)用戶只需要關(guān)心所需產(chǎn)品對應(yīng)的工廠,無需關(guān)心創(chuàng)建的細(xì)節(jié)。加入新產(chǎn)品符合開閉原則,提高可擴(kuò)展性。
工廠方法
定義:定義一個創(chuàng)建對象的接口,但讓實(shí)現(xiàn)這個接口的類決定實(shí)例化哪個類,工廠方法讓類的實(shí)例化推遲到子類中進(jìn)行。
類型:創(chuàng)建型
適用場景:
創(chuàng)建對象需要大量重復(fù)的代碼
客戶端(應(yīng)用層)不依賴于產(chǎn)品類實(shí)例如何被創(chuàng)建、實(shí)現(xiàn)等細(xì)節(jié)。
一個類通過其子類來指定創(chuàng)建哪個對象。
優(yōu)點(diǎn):
用戶只需要關(guān)心所需產(chǎn)品對應(yīng)的工廠,無需關(guān)心創(chuàng)建的細(xì)節(jié)。
加入新產(chǎn)品符合開閉原則,提高可擴(kuò)展性。
缺點(diǎn):
類的個數(shù)容易過多,增加復(fù)雜度。
增加了系統(tǒng)的抽象性和理解難度。
案例public abstract class Video { public abstract void produce(); }
public class JavaVideo extends Video { @Override public void produce() { System.out.println("錄制Java課程視頻"); } }
public class PythonVideo extends Video { @Override public void produce() { System.out.println("錄制Python課程視頻"); } }
public abstract class VideoFactory { public abstract Video getVideo(); }
public class JavaVideoFactory extends VideoFactory { @Override public Video getVideo() { return new JavaVideo(); } }
public class PythonVideoFactory extends VideoFactory { @Override public Video getVideo() { return new PythonVideo(); } }
public class Test { public static void main(String[] args) { VideoFactory videoFactory = new PythonVideoFactory(); Video video = videoFactory.getVideo(); video.produce(); } }
可擴(kuò)展性:
增加一個前端視頻:
public class FEVideo extends Video{ @Override public void produce() { System.out.println("錄制FE課程視頻"); } }
public class FEVideoFactory extends VideoFactory{ @Override public Video getVideo() { return new FEVideo(); } }
重點(diǎn):videoFactory把創(chuàng)建具體某個視頻的職責(zé)交由子類來實(shí)現(xiàn)。這里Video是產(chǎn)品,F(xiàn)EVideo、PythonVideo、JavaVideo是實(shí)際的產(chǎn)品,VideoFactory是創(chuàng)建者,而FEVideoFactory、PythonVideoFactory、JavaVideoFactory是實(shí)際的創(chuàng)建者
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/74966.html
摘要:基于工廠角色和產(chǎn)品角色的多態(tài)性設(shè)計是工廠方法模式的關(guān)鍵。工廠方法模式之所以又被稱為多態(tài)工廠模式,是因?yàn)樗械木唧w工廠類都具有同一抽象父類。工廠方法模式總結(jié)工廠方法模式是簡單工廠模式的進(jìn)一步抽象和推廣。 JavaScript工廠模式 首先需要說一下工廠模式。工廠模式根據(jù)抽象程度的不同分為三種 簡單工廠模式 工廠方法模式 抽象工廠模式 1.簡單工廠模式 簡單工廠模式:又稱為靜態(tài)工廠方法...
摘要:與以往的使用的方式不同,工廠模式使用工廠實(shí)例化對象。抽象工廠模式亮相抽象工廠模式抽象工廠模式提供一個接口,用于創(chuàng)建相關(guān)或依賴對象的家族,而不需要明確指定具體類。 寫在前面 這篇博文介紹設(shè)計模式的形式將與其他篇博文不太一樣,這里我們將從一個問題入手,逐步了解到簡單工廠、工廠方法與抽象工廠模式。 PS:這篇博文涉及的內(nèi)容較多,所以篇幅有點(diǎn)長,請耐心閱讀。 為什么要使用工廠模式? 在 OO ...
摘要:不過怎么來說工廠方法模式是簡單工廠模式的升級版。其次,工廠模式是一種典型的解耦模式,迪米特法則在工廠模式中表現(xiàn)的尤為明顯。 工廠模式想必大家在開發(fā)過程中會經(jīng)常用到,顧名思義其就是作為一個工廠用來生產(chǎn)產(chǎn)品的,下面來簡單介紹幾種常見的工廠模式。 0x01 簡單工廠模式 1、類圖結(jié)構(gòu)showImg(/img/bVFf1t?w=531&h=278); 2、角色分類 工廠類:其內(nèi)部具有一點(diǎn)的判...
摘要:二簡單工廠模式組成工廠類工廠模式的核心,通過調(diào)用它來實(shí)現(xiàn)其他類的功能。三工廠方法模式利用工廠方法模式可以有效解決簡單工廠模式破壞開閉原則的問題。 一、概念 1、工廠模式分為三類:(1)簡單工廠模式:一個工廠創(chuàng)建所有產(chǎn)品(2)工廠方法模式:一個工廠方法創(chuàng)建一個產(chǎn)品(3)抽象工廠模式:一個工廠方法創(chuàng)建一類產(chǎn)品 2、創(chuàng)建型模式這種模式是指將實(shí)例的創(chuàng)建和使用分離開來,隱藏類實(shí)例的創(chuàng)建細(xì)節(jié),外界...
摘要:源碼參考抽象工廠模式抽象工廠模式提供一個接口,用于創(chuàng)建相關(guān)或依賴對象的家族,而不需要指定具體類。工廠方法模式和抽象工廠模式如何選擇開始的時候,可以選擇工廠方法模式,因?yàn)樗芎唵沃恍枰^承,并實(shí)現(xiàn)工廠方法即可。 問題:在上一篇 python設(shè)計模式:工廠方法模式我們嘗試使用工廠方法創(chuàng)建了披薩店,現(xiàn)在為了保證披薩加盟店也能有良好的聲譽(yù),我們需要統(tǒng)一原材料,這個該如何做呢? 為了確保每家加盟...
摘要:反射提供給面向?qū)ο缶幊炭梢宰允〉哪芰Γ捶瓷?。在簡單工廠模式中,根據(jù)傳遞的參數(shù)來返回不同的類的實(shí)例簡單工廠模式又稱為靜態(tài)工廠方法模式。也就是簡單工廠模式工廠工廠類。PHP高級特性-反射以及工廠設(shè)計模式的結(jié)合使用 [結(jié)合 Laravel-Admin 代碼實(shí)例講解]利用反射來實(shí)現(xiàn)工廠模式的生產(chǎn)而無需創(chuàng)建特定的工廠類本文地址http://janrs.com/?p=833轉(zhuǎn)載無需經(jīng)過作者本人授權(quán)轉(zhuǎn)載...
閱讀 1538·2023-04-26 00:25
閱讀 923·2021-09-27 13:36
閱讀 934·2019-08-30 14:14
閱讀 2185·2019-08-29 17:10
閱讀 1018·2019-08-29 15:09
閱讀 1954·2019-08-28 18:21
閱讀 971·2019-08-26 13:27
閱讀 984·2019-08-26 10:58