為什么要用工廠模式:
? 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

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

一個工廠

訂車


測試

通過簡單工廠方式可以創(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)品,寶馬和五菱

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

測試

當(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)品的抽象接口

工廠的抽象接口

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


具體的工廠有一個小米的和一個華為的

測試

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

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