工廠模式

為什么要用工廠模式:
? 1:實(shí)例化對象不使用new,用工廠方法代替,new 對象,通過工廠的get方法可以對對象屬性更加的清晰,對于客戶端來講,客戶端只需要使用就可以了,不需要去自己創(chuàng)建,
? 2:可以隱藏對象創(chuàng)建的復(fù)雜性
? 3:創(chuàng)建對象的代碼集中管理,便于對 對象進(jìn)行統(tǒng)一改造
? 4:將選擇實(shí)現(xiàn)類,創(chuàng)建對象統(tǒng)一管理和控制,從而將調(diào)用者跟我們的實(shí)現(xiàn)類解耦,

簡單工廠模式

概要:1:一個抽象產(chǎn)品類,2:具體產(chǎn)品類3:一個工廠
優(yōu)點(diǎn):簡單易于實(shí)現(xiàn),把類的實(shí)例化交給工廠,易于解耦 。
缺點(diǎn):添加具體產(chǎn)品需要修改工廠違反OCP開放封閉原則。
具體實(shí)現(xiàn):
一個抽象的產(chǎn)品類,汽車類Car


image-20200506215809373.png

具體的對象,一個大眾,一個寶馬


image.png

一個工廠
image.png

訂車
image-20200506220138294.png

image-20200506220201351.png

測試
image.png

通過簡單工廠方式可以創(chuàng)建一個我們需要的汽車實(shí)例
不過對于增加新的產(chǎn)品,需要擴(kuò)展已有代碼

工廠方法模式

工廠模式介紹:定義一個創(chuàng)建對象的抽象方法,有子類決定要實(shí)例化的類,工廠方法模式將對象的實(shí)例化推遲到子類
工廠方法模式為了解決簡單工廠沒有實(shí)現(xiàn)開閉原則,每一個具體產(chǎn)品對應(yīng)一個具體工廠,工廠方法模式將對象的實(shí)例化推遲到子類.
概要:1:一個抽象產(chǎn)品類 2: 多個具體產(chǎn)品類 3:一個抽象工廠 4: 多個具體工廠 - 每一個具體產(chǎn)品對應(yīng)一個具體工廠
舉例:車類,有兩個產(chǎn)品,寶馬和五菱


image.png

每一個具體產(chǎn)品對應(yīng)一個具體工廠


image.png

測試
image.png

當(dāng)我們需要什么車只要到車工廠去取就可以,當(dāng)產(chǎn)品新增,只要新增具體車類和具體工廠,不需要對現(xiàn)有的代碼進(jìn)行修改

抽象工廠模式

提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無需指定它們具體的類。
理解:當(dāng)工廠只生產(chǎn)一個產(chǎn)品的時候,即為工廠方法模式,而工廠如果生產(chǎn)兩個或以上的商品即變?yōu)槌橄蠊S模式。
相當(dāng)于圍繞一個超級工廠創(chuàng)建其他工廠,該超級工廠又稱為其他工廠的工廠
優(yōu)點(diǎn):(1)具體產(chǎn)品在應(yīng)用層的代碼隔離,無需關(guān)心創(chuàng)建的細(xì)節(jié),代碼解耦
(2)實(shí)現(xiàn)多個產(chǎn)品族(相關(guān)聯(lián)產(chǎn)品組成的家族),而工廠方法模式的單個產(chǎn)品,可以滿足更多的生產(chǎn)需求。
(3)很好的滿足OCP開放封閉原則。
(4)抽象工廠模式中我們可以定義實(shí)現(xiàn)不止一個接口,一個工廠也可以生產(chǎn)不止一個產(chǎn)品類。將一系列的產(chǎn)品統(tǒng)一到一起創(chuàng)建
缺點(diǎn):(1)擴(kuò)展產(chǎn)品族相當(dāng)麻煩,而且擴(kuò)展產(chǎn)品族會違反OCP,因?yàn)橐薷乃械墓S。
(2)由于抽象工廠模式是工廠方法模式的擴(kuò)展,總體的來說很笨重。
舉例
產(chǎn)品的抽象接口


image-20200521193158057.png

工廠的抽象接口


image-20200521193241931.png

具體的產(chǎn)品,有小米手機(jī)和路由器的和華為的手機(jī)和路由器
image-20200521193444527.png

image-20200521193543217.png

具體的工廠有一個小米的和一個華為的
image-20200521193616472.png

測試
image-20200521193704612.png

當(dāng)然這是寫的都很簡單,看不出效果,如果創(chuàng)建對象很復(fù)雜,那么優(yōu)勢就一目了然
應(yīng)用場景
image.png

小結(jié)

簡單工廠模式是由一個具體的類去創(chuàng)建其他類的實(shí)例,父類是具體的。
工廠方法模式是有一個抽象的父類定義公共接口,子類負(fù)責(zé)生成具體的對象,這樣做的目的是將類的實(shí)例化操作延遲到子類中完成。
抽象工廠模式提供一個創(chuàng)建一系列相關(guān)或相互依賴對象的接口,而無須指定他們具體的類。它針對的是有多個產(chǎn)品的等級結(jié)構(gòu)。而工廠方法模式針對的是一個產(chǎn)品的等級結(jié)構(gòu)。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

友情鏈接更多精彩內(nèi)容