什么是工廠模式(什么是工廠模式和單例模式)

時(shí)間:2023-01-12 10:10:51 閱讀:140

原標(biāo)題:什么是工廠模式(什么是工廠模式和單例模式)

  很多人認(rèn)為工廠模式很簡單,只是有一個(gè)建造工廠,幫我們進(jìn)行對象構(gòu)造而已。那么請嘗試回答下以下問題:

什么是工廠模式

  1、工廠模式分為幾類?2、GOF 23種設(shè)計(jì)模式中,工廠方法模式和抽象工廠模式有什么區(qū)別?3、不在GOF 23種設(shè)計(jì)模式中的簡單工廠模式是什么?4、簡單工廠模式、工廠方法模式和抽象工廠模式各自解決什么問題?有什么不同?

  如果以上四個(gè)問題,你都可以很好的回答的話,那么這篇文章就沒有繼續(xù)讀下去的必要了,否則,建議你好好學(xué)習(xí)下本文。

  1?三種工廠模式

  工廠模式可以分為三類:

什么是工廠模式和單例模式

  簡單工廠模式(Simple Factory)工廠方法模式(Factory Method)抽象工廠模式(Abstract Factory)

  這三種模式從上到下逐步抽象,并且更具一般性。

  GOF在《設(shè)計(jì)模式》一書中將工廠模式分為兩類:工廠方法模式(Factory Method)與抽象工廠模式(Abstract Factory)。

  將簡單工廠模式(Simple Factory)看為工廠方法模式的一種特例,兩者歸為一類。

  這三種工廠模式在設(shè)計(jì)模式的分類中都屬于創(chuàng)建型模式。

  創(chuàng)建型模式(Creational Pattern)對類的實(shí)例化過程進(jìn)行了抽象,能夠?qū)④浖K中對象的創(chuàng)建和對象的使用分離。為了使軟件的結(jié)構(gòu)模式更加清晰,外界對于這些對象只需要知道它們共同的接口,而不清楚其具體的實(shí)現(xiàn)細(xì)節(jié),使整個(gè)系統(tǒng)的設(shè)計(jì)更加符合單一職責(zé)原則。

  創(chuàng)建型模式在創(chuàng)建什么(What),由誰創(chuàng)建(Who),何時(shí)創(chuàng)建(When)等方面都為軟件設(shè)計(jì)者提供了盡可能大的靈活性。

  創(chuàng)建型模式隱藏了類的實(shí)例的創(chuàng)建細(xì)節(jié),通過隱藏對象如何被創(chuàng)建和組合在一起達(dá)到使整個(gè)系統(tǒng)獨(dú)立的目的。

  工廠模式是創(chuàng)建型模式中比較重要的。工廠模式的主要功能就是幫助我們實(shí)例化對象。之所以名字中包含工廠模式四個(gè)字,是因?yàn)閷ο蟮膶?shí)例化過程是通過工廠實(shí)現(xiàn)的,是用工廠代替new操作的。

  這樣做的好處是封裝了對象的實(shí)例化細(xì)節(jié),尤其是對于實(shí)例化較復(fù)雜或者對象的生命周期應(yīng)該集中管理的情況。會(huì)給你系統(tǒng)帶來更大的可擴(kuò)展性和盡量少的修改量。

  接下來我們分別介紹下這三種工廠模式。

  2?簡單工廠模式

  簡單工廠模式是屬于創(chuàng)建型模式,又叫做靜態(tài)工廠方法(Static Factory Method)模式。簡單工廠模式是由一個(gè)工廠對象決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例。簡單工廠模式是工廠模式家族中最簡單實(shí)用的模式,可以理解為是不同工廠模式的一個(gè)特殊實(shí)現(xiàn)。

  在介紹簡單工廠模式之前,我們嘗試解決以下問題:

  現(xiàn)在我們要使用面向?qū)ο蟮男问蕉x計(jì)算器,為了實(shí)現(xiàn)各算法之間的解耦。主要的用到的類如下:

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  當(dāng)我想要執(zhí)行加法運(yùn)算時(shí),可以使用如下代碼:

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  當(dāng)我需要執(zhí)行減法運(yùn)算時(shí),我就要?jiǎng)?chuàng)建一個(gè)OperationSub類。也就是說,我想要使用不同的運(yùn)算的時(shí)候就要?jiǎng)?chuàng)建不同的類,并且要明確知道該類的名字。

  那么這種重復(fù)的創(chuàng)建類的工作其實(shí)可以放到一個(gè)統(tǒng)一的工廠類中。簡單工廠模式有以下優(yōu)點(diǎn):

  1、一個(gè)調(diào)用者想創(chuàng)建一個(gè)對象,只要知道其名稱就可以了。2、屏蔽產(chǎn)品的具體實(shí)現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口。

  簡單工廠模式實(shí)現(xiàn)方式

  簡單工廠模式其實(shí)和他的名字一樣,很簡單。先來看看它的組成:

  Factory:這是本模式的核心,含有一定的商業(yè)邏輯和判斷邏輯。在java中它往往由 一個(gè)具體類實(shí)現(xiàn)。(OperationFactory)

  Product:它一般是具體產(chǎn)品繼承的父類或者實(shí)現(xiàn)的接口。在java中由接口或者抽象類來實(shí)現(xiàn)。(Operation)

  ConcreteProduct:工廠類所創(chuàng)建的對象就是此角色的實(shí)例。在java中由一個(gè)具體類實(shí)現(xiàn)。 來用類圖來清晰的表示下的它們之間的關(guān)系(OperationAdd\OperationSub等)

  關(guān)系圖如下:

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  ?

  在原有類的基礎(chǔ)上,定義工廠類:

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  有了工廠類之后,可以使用工廠創(chuàng)建對象:

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  通過簡單工廠模式,該計(jì)算器的使用者不需要關(guān)系實(shí)現(xiàn)加法邏輯的那個(gè)類的具體名字,他只要知道該類對應(yīng)的參數(shù)"+"就可以了。

  簡單工廠模式存在的問題

  當(dāng)我們需要增加一種計(jì)算時(shí),例如開平方。這個(gè)時(shí)候我們需要先定義一個(gè)類繼承Operation類,其中實(shí)現(xiàn)平方的代碼。除此之外我們還要修改OperationFactory類的代碼,增加一個(gè)case。這顯然是違背開閉原則的。可想而知對于新產(chǎn)品的加入,工廠類是很被動(dòng)的。

  我們舉的例子是最簡單的情況。而在實(shí)際應(yīng)用中,很可能產(chǎn)品是一個(gè)多層次的樹狀結(jié)構(gòu)。 簡單工廠可能就不太適用了。

  簡單工廠模式總結(jié)

  工廠類是整個(gè)簡單工廠模式的關(guān)鍵。包含了必要的邏輯判斷,根據(jù)外界給定的信息,決定究竟應(yīng)該創(chuàng)建哪個(gè)具體類的對象。通過使用工廠類,外界可以從直接創(chuàng)建具體產(chǎn)品對象的尷尬局面擺脫出來,僅僅需要負(fù)責(zé)“消費(fèi)”對象就可以了。而不必管這些對象究竟如何創(chuàng)建及如何組織的。明確了各自的職責(zé)和權(quán)利,有利于整個(gè)軟件體系結(jié)構(gòu)的優(yōu)化。

  但是由于工廠類集中了所有實(shí)例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則,將全部創(chuàng)建邏輯集中到了一個(gè)工廠類中;它所能創(chuàng)建的類只能是事先考慮到的,如果需要添加新的類,則就需要改變工廠類了。

  當(dāng)系統(tǒng)中的具體產(chǎn)品類不斷增多時(shí)候,可能會(huì)出現(xiàn)要求工廠類根據(jù)不同條件創(chuàng)建不同實(shí)例的需求.這種對條件的判斷和對具體產(chǎn)品類型的判斷交錯(cuò)在一起,很難避免模塊功能的蔓延,對系統(tǒng)的維護(hù)和擴(kuò)展非常不利;

  這些缺點(diǎn)在工廠方法模式中得到了一定的解決。

  3?工廠方法模式

  工廠方法模式(Factory Method Pattern)又稱為工廠模式,也叫虛擬構(gòu)造器(Virtual Constructor)模式或者多態(tài)工廠(Polymorphic Factory)模式,它屬于類創(chuàng)建型模式。

  工廠方法模式是一種實(shí)現(xiàn)了“工廠”概念的面向?qū)ο笤O(shè)計(jì)模式。就像其他創(chuàng)建型模式一樣,它也是處理在不指定對象具體類型的情況下創(chuàng)建對象的問題。

  工廠方法模式的實(shí)質(zhì)是“定義一個(gè)創(chuàng)建對象的接口,但讓實(shí)現(xiàn)這個(gè)接口的類來決定實(shí)例化哪個(gè)類。工廠方法讓類的實(shí)例化推遲到子類中進(jìn)行。”

  工廠方法模式用途

  工廠方法模式和簡單工廠模式雖然都是通過工廠來創(chuàng)建對象,他們之間最大的不同是——工廠方法模式在設(shè)計(jì)上完全完全符合“開閉原則”。

  在以下情況下可以使用工廠方法模式:

  一個(gè)類不知道它所需要的對象的類:在工廠方法模式中,客戶端不需要知道具體產(chǎn)品類的類名,只需要知道所對應(yīng)的工廠即可,具體的產(chǎn)品對象由具體工廠類創(chuàng)建;客戶端需要知道創(chuàng)建具體產(chǎn)品的工廠類。一個(gè)類通過其子類來指定創(chuàng)建哪個(gè)對象:在工廠方法模式中,對于抽象工廠類只需要提供一個(gè)創(chuàng)建產(chǎn)品的接口,而由其子類來確定具體要?jiǎng)?chuàng)建的對象,利用面向?qū)ο蟮亩鄳B(tài)性和里氏代換原則,在程序運(yùn)行時(shí),子類對象將覆蓋父類對象,從而使得系統(tǒng)更容易擴(kuò)展。將創(chuàng)建對象的任務(wù)委托給多個(gè)工廠子類中的某一個(gè),客戶端在使用時(shí)可以無須關(guān)心是哪一個(gè)工廠子類創(chuàng)建產(chǎn)品子類,需要時(shí)再動(dòng)態(tài)指定,可將具體工廠類的類名存儲(chǔ)在配置文件或數(shù)據(jù)庫中。

  工廠方法模式實(shí)現(xiàn)方式

  工廠方法模式包含如下角色:

  Product:抽象產(chǎn)品(Operation)

  ConcreteProduct:具體產(chǎn)品(OperationAdd)

  Factory:抽象工廠(IFactory)

  ConcreteFactory:具體工廠(AddFactory)

  關(guān)系圖如下:

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  ?

  這里還用計(jì)算器的例子。在保持Operation,OperationAdd,OperationDiv,OperationSub,OperationMul等幾個(gè)方法不變的情況下,修改簡單工廠模式中的工廠類(OperationFactory)。替代原有的那個(gè)"萬能"的大工廠類,這里使用工廠方法來代替:

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  這樣,在客戶端中想要執(zhí)行加法運(yùn)算時(shí),需要以下方式:

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  到這里,一個(gè)工廠方法模式就已經(jīng)寫好了。

  從代碼量上看,這種工廠方法模式比簡單工廠方法模式更加復(fù)雜。針對不同的操作(Operation)類都有對應(yīng)的工廠。很多人會(huì)有以下疑問:

  貌似工廠方法模式比簡單工廠模式要復(fù)雜的多?

  工廠方法模式和我自己創(chuàng)建對象沒什么區(qū)別?為什么要多搞出一些工廠來?

  下面就針對以上兩個(gè)問題來深入理解一下工廠方法模式。

  為什么要使用工廠來創(chuàng)建對象?

  封裝對象的創(chuàng)建過程

  在工廠方法模式中,工廠方法用來創(chuàng)建客戶所需要的產(chǎn)品,同時(shí)還向客戶隱藏了哪種具體產(chǎn)品類將被實(shí)例化這一細(xì)節(jié),用戶只需要關(guān)心所需產(chǎn)品對應(yīng)的工廠,無須關(guān)心創(chuàng)建細(xì)節(jié),甚至無須知道具體產(chǎn)品類的類名。

  基于工廠角色和產(chǎn)品角色的多態(tài)性設(shè)計(jì)是工廠方法模式的關(guān)鍵。它能夠使工廠可以自主確定創(chuàng)建何種產(chǎn)品對象,而如何創(chuàng)建這個(gè)對象的細(xì)節(jié)則完全封裝在具體工廠內(nèi)部。工廠方法模式之所以又被稱為多態(tài)工廠模式,是因?yàn)樗械木唧w工廠類都具有同一抽象父類。

  為什么每種對象要單獨(dú)有一個(gè)工廠?

  符合『開放-封閉原則』

  主要目的是為了解耦。在系統(tǒng)中加入新產(chǎn)品時(shí),無須修改抽象工廠和抽象產(chǎn)品提供的接口,無須修改客戶端,也無須修改其他的具體工廠和具體產(chǎn)品,而只要添加一個(gè)具體工廠和具體產(chǎn)品就可以了。這樣,系統(tǒng)的可擴(kuò)展性也就變得非常好,完全符合“開閉原則。

  以上就是工廠方法模式的優(yōu)點(diǎn)。但是,工廠模式也有一些不盡如人意的地方:

  在添加新產(chǎn)品時(shí),需要編寫新的具體產(chǎn)品類,而且還要提供與之對應(yīng)的具體工廠類,系統(tǒng)中類的個(gè)數(shù)將成對增加,在一定程度上增加了系統(tǒng)的復(fù)雜度,有更多的類需要編譯和運(yùn)行,會(huì)給系統(tǒng)帶來一些額外的開銷。由于考慮到系統(tǒng)的可擴(kuò)展性,需要引入抽象層,在客戶端代碼中均使用抽象層進(jìn)行定義,增加了系統(tǒng)的抽象性和理解難度,且在實(shí)現(xiàn)時(shí)可能需要用到DOM、反射等技術(shù),增加了系統(tǒng)的實(shí)現(xiàn)難度。

  工廠方法模式總結(jié)

  工廠方法模式是簡單工廠模式的進(jìn)一步抽象和推廣。

  由于使用了面向?qū)ο蟮亩鄳B(tài)性,工廠方法模式保持了簡單工廠模式的優(yōu)點(diǎn),而且克服了它的缺點(diǎn)。

  在工廠方法模式中,核心的工廠類不再負(fù)責(zé)所有產(chǎn)品的創(chuàng)建,而是將具體創(chuàng)建工作交給子類去做。這個(gè)核心類僅僅負(fù)責(zé)給出具體工廠必須實(shí)現(xiàn)的接口,而不負(fù)責(zé)產(chǎn)品類被實(shí)例化這種細(xì)節(jié),這使得工廠方法模式可以允許系統(tǒng)在不修改工廠角色的情況下引進(jìn)新產(chǎn)品。

  工廠方法模式的主要優(yōu)點(diǎn)是增加新的產(chǎn)品類時(shí)無須修改現(xiàn)有系統(tǒng),并封裝了產(chǎn)品對象的創(chuàng)建細(xì)節(jié),系統(tǒng)具有良好的靈活性和可擴(kuò)展性;其缺點(diǎn)在于增加新產(chǎn)品的同時(shí)需要增加新的工廠,導(dǎo)致系統(tǒng)類的個(gè)數(shù)成對增加,在一定程度上增加了系統(tǒng)的復(fù)雜性。

  4?抽象工廠模式

  抽象工廠模式(Abstract Factory Pattern):提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,屬于對象創(chuàng)建型模式。

  抽象工廠模式提供了一種方式,可以將同一產(chǎn)品族的單獨(dú)的工廠封裝起來。在正常使用中,客戶端程序需要?jiǎng)?chuàng)建抽象工廠的具體實(shí)現(xiàn),然后使用抽象工廠作為接口來創(chuàng)建這一主題的具體對象。客戶端程序不需要知道(或關(guān)心)它從這些內(nèi)部的工廠方法中獲得對象的具體類型,因?yàn)榭蛻舳顺绦騼H使用這些對象的通用接口。抽象工廠模式將一組對象的實(shí)現(xiàn)細(xì)節(jié)與他們的一般使用分離開來。

  產(chǎn)品族

  來認(rèn)識(shí)下什么是產(chǎn)品族: 位于不同產(chǎn)品等級結(jié)構(gòu)中,功能相關(guān)的產(chǎn)品組成的家族。如下面的例子,就有兩個(gè)產(chǎn)品族:跑車族和商務(wù)車族。

  ?

  關(guān)系圖如下:

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  ?

  抽象工廠模式用途

  抽象工廠模式和工廠方法模式一樣,都符合開放-封閉原則。但是不同的是,工廠方法模式在增加一個(gè)具體產(chǎn)品的時(shí)候,都要增加對應(yīng)的工廠。但是抽象工廠模式只有在新增一個(gè)類型的具體產(chǎn)品時(shí)才需要新增工廠。也就是說,工廠方法模式的一個(gè)工廠只能創(chuàng)建一個(gè)具體產(chǎn)品。而抽象工廠模式的一個(gè)工廠可以創(chuàng)建屬于一類類型的多種具體產(chǎn)品。工廠創(chuàng)建產(chǎn)品的個(gè)數(shù)介于簡單工廠模式和工廠方法模式之間。

  在以下情況下可以使用抽象工廠模式:

  一個(gè)系統(tǒng)不應(yīng)當(dāng)依賴于產(chǎn)品類實(shí)例如何被創(chuàng)建、組合和表達(dá)的細(xì)節(jié),這對于所有類型的工廠模式都是重要的。系統(tǒng)中有多于一個(gè)的產(chǎn)品族,而每次只使用其中某一產(chǎn)品族。屬于同一個(gè)產(chǎn)品族的產(chǎn)品將在一起使用,這一約束必須在系統(tǒng)的設(shè)計(jì)中體現(xiàn)出來。系統(tǒng)提供一個(gè)產(chǎn)品類的庫,所有的產(chǎn)品以同樣的接口出現(xiàn),從而使客戶端不依賴于具體實(shí)現(xiàn)。

  抽象工廠模式實(shí)現(xiàn)方式

  抽象工廠模式包含如下角色:

  AbstractFactory(抽象工廠):用于聲明生成抽象產(chǎn)品的方法

  ConcreteFactory(具體工廠):實(shí)現(xiàn)了抽象工廠聲明的生成抽象產(chǎn)品的方法,生成一組具體產(chǎn)品,這些產(chǎn)品構(gòu)成了一個(gè)產(chǎn)品族,每一個(gè)產(chǎn)品都位于某個(gè)產(chǎn)品等級結(jié)構(gòu)中;

  AbstractProduct(抽象產(chǎn)品):為每種產(chǎn)品聲明接口,在抽象產(chǎn)品中定義了產(chǎn)品的抽象業(yè)務(wù)方法;

  Product(具體產(chǎn)品):定義具體工廠生產(chǎn)的具體產(chǎn)品對象,實(shí)現(xiàn)抽象產(chǎn)品接口中定義的業(yè)務(wù)方法。

  本文的例子采用一個(gè)汽車代工廠造汽車的例子。假設(shè)我們是一家汽車代工廠商,我們負(fù)責(zé)給奔馳和特斯拉兩家公司制造車子。

  我們簡單的把奔馳車?yán)斫鉃樾枰佑偷能嚕厮估瓰樾枰潆姷能嚒F渲斜捡Y車中包含跑車和商務(wù)車兩種,特斯拉同樣也包含奔馳車和商務(wù)車。

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  ?

  以上場景,我們就可以把跑車和商務(wù)車分別對待,對于跑車有單獨(dú)的工廠創(chuàng)建,商務(wù)車也有單獨(dú)的工廠。

  這樣,以后無論是再幫任何其他廠商造車,只要是跑車或者商務(wù)車我們都不需要再引入工廠。同樣,如果我們要增加一種其他類型的車,比如越野車,我們也不需要對跑車或者商務(wù)車的任何東西做修改。

  下面是抽象產(chǎn)品,奔馳車和特斯拉車:

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  下面是具體產(chǎn)品,奔馳跑車、奔馳商務(wù)車、特斯拉跑車、特斯拉商務(wù)車:

  工廠什么是工廠模式(什么是工廠模式和單例模式)

  ?

  下面是抽象工廠:

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  下面是具體工廠:

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  “開閉原則”的傾斜性

  “開閉原則”要求系統(tǒng)對擴(kuò)展開放,對修改封閉,通過擴(kuò)展達(dá)到增強(qiáng)其功能的目的。對于涉及到多個(gè)產(chǎn)品族與多個(gè)產(chǎn)品等級結(jié)構(gòu)的系統(tǒng),其功能增強(qiáng)包括兩方面:

  增加產(chǎn)品族:對于增加新的產(chǎn)品族,工廠方法模式很好的支持了“開閉原則”單例,對于新增加的產(chǎn)品族,只需要對應(yīng)增加一個(gè)新的具體工廠即可,對已有代碼無須做任何修改。增加新的產(chǎn)品等級結(jié)構(gòu):對于增加新的產(chǎn)品等級結(jié)構(gòu),需要修改所有的工廠角色,包括抽象工廠類,在所有的工廠類中都需要增加生產(chǎn)新產(chǎn)品的方法,不能很好地支持“開閉原則”。

  抽象工廠模式的這種性質(zhì)稱為“開閉原則”的傾斜性,抽象工廠模式以一種傾斜的方式支持增加新的產(chǎn)品,它為新產(chǎn)品族的增加提供方便,但不能為新的產(chǎn)品等級結(jié)構(gòu)的增加提供這樣的方便。

  抽象工廠模式總結(jié)

  抽象工廠模式提供一個(gè)創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無須指定它們具體的類。抽象工廠模式又稱為Kit模式,屬于對象創(chuàng)建型模式。

  抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態(tài)。

  抽象工廠模式的主要優(yōu)點(diǎn)是隔離了具體類的生成,使得客戶并不需要知道什么被創(chuàng)建,而且每次可以通過具體工廠類創(chuàng)建一什么個(gè)產(chǎn)品族中的多個(gè)對象,增加或者替換產(chǎn)品族比較方便,增加新的具體工廠和產(chǎn)品族很方便;主要缺點(diǎn)在于增加新的產(chǎn)品等級結(jié)構(gòu)很復(fù)雜,需要修改抽象工廠和所有的具體工廠類,對“開閉原則”的支持呈現(xiàn)傾斜性。

  5?三種工廠模式對比

  簡單工廠模式的優(yōu)缺點(diǎn)

  優(yōu)點(diǎn):1、屏蔽產(chǎn)品的具體實(shí)現(xiàn),調(diào)用者只關(guān)心產(chǎn)品的接口。2、實(shí)現(xiàn)簡單缺點(diǎn):1、增加產(chǎn)品,需要修改工廠類,不符合開放-封閉原則2、工廠類集中了所有實(shí)例的創(chuàng)建邏輯,違反了高內(nèi)聚責(zé)任分配原則

  工廠方法模式的優(yōu)缺點(diǎn)

  優(yōu)點(diǎn):1、繼承了簡單工廠模式的優(yōu)點(diǎn)2、符合開放-封閉原則缺點(diǎn):1、增加產(chǎn)品,需要增加新的工廠類,導(dǎo)致系統(tǒng)類的個(gè)數(shù)成對增加,在一定程度上增加了系統(tǒng)的復(fù)雜性。

  抽象工廠模式的優(yōu)缺點(diǎn)

  優(yōu)點(diǎn):1、隔離了具體類的生成,使得客戶并不需要知道什么被創(chuàng)建2、每次可以通過具體工廠類創(chuàng)建一個(gè)產(chǎn)品族中的多個(gè)對象,增加或者替換產(chǎn)品族比較方便,增加新的具體工廠和產(chǎn)品族很方便;缺點(diǎn)增加新的產(chǎn)品等級結(jié)構(gòu)很復(fù)雜,需要修改抽象工廠和所有的具體工廠類,對“開閉原則”的支持呈現(xiàn)傾斜性。?

  ?

  三種工廠模式的對比與轉(zhuǎn)換

  什么是工廠模式(什么是工廠模式和單例模式)

  ?

  簡單工廠 : 用來生產(chǎn)同一等級結(jié)構(gòu)中的任意產(chǎn)品。(對于增加新的產(chǎn)品,主要是新增產(chǎn)品,就要修改工廠類。符合單一職責(zé)原則。不符合開放-封閉原則)

  工廠方法 :用來生產(chǎn)同一等級結(jié)構(gòu)中的固定產(chǎn)品。(支持增加任意產(chǎn)品,新增產(chǎn)品時(shí)不需要更改已有的工廠,需要增加該產(chǎn)品對應(yīng)的工廠。符合單一職責(zé)原則、符合開放-封閉原則。但是引入了復(fù)雜性)

  抽象工廠 :用來生產(chǎn)不同產(chǎn)品族的全部產(chǎn)品。(增加新產(chǎn)品時(shí),需要修改工廠,增加產(chǎn)品族時(shí),需要增加工廠。符合單一職責(zé)原則,部分符合開放-封閉原則,降低了復(fù)雜性)

  最后,三種工廠模式各有優(yōu)缺點(diǎn),沒有最好的,只有最合適的!

版權(quán)聲明:本文來自互聯(lián)網(wǎng)整理發(fā)布,如有侵權(quán),聯(lián)系刪除

原文鏈接:http://m.avtt22014.comhttp://m.avtt22014.com/wangluozixun/15602.html

標(biāo)簽:模式 工廠 單例 什么

Copyright ? 2021-2022 All Rights Reserved 備案編號(hào):閩ICP備2023009674號(hào) 網(wǎng)站地圖 聯(lián)系:dhh0407@outlook.com

主站蜘蛛池模板: 国产亚洲精品无码专区| 精品免费一区二区三区| 精品国产三级a∨在线欧美| 日韩欧美综合视频| 国产无遮挡又黄又爽在线观看| 亚洲乱码一区二区三区在线观看| 97碰公开在线观看免费视频| 波多野结衣一区二区三区| 在线免费观看色片| 亚洲综合色丁香婷婷六月图片| av狼最新网址| 波多野结衣免费视频观看| 国内精品久久久久影院日本| 亚洲精品成a人在线观看| 91资源在线观看| 欧美日韩国产va另类| 国产精品videossex另类| 亚洲Aⅴ在线无码播放毛片一线天 亚洲A∨无码一区二区三区 | 亚洲va久久久噜噜噜久久男同| 五月天丁香久久| 日韩电影免费在线观看网站| 国产交换配乱吟播放免费| 中文字幕永久免费视频| 精品亚洲一区二区三区在线播放| 少妇AV射精精品蜜桃专区| 最近最新2019中文字幕4| 国产特黄1级毛片| 久久最近最新中文字幕大全| 色聚网久久综合| 成人18在线观看| 亚洲综合一区无码精品| 在线国产你懂的| 日韩一区二区三区免费视频| 四虎永久在线精品免费观看地址 | bl道具play珠串震珠强迫| 欧美综合亚洲图片综合区| 国产爆乳无码一区二区麻豆| 久久久久无码精品国产| 竹菊影视欧美日韩一区二区三区四区五区| 天天色天天射综合网| 亚洲国产成人va在线观看|