設計模式是一套經過反複使用(yòng)的代碼設計經驗,目的是為(wèi)了重用(yòng)代碼、讓代碼更容易被他(tā)人理(lǐ)解、保證代碼可(kě)靠性。常見設計模式分(fēn)為(wèi)創建型模式、結構型模式、行為(wèi)型模式共二十三種,今天我們重點說一下工(gōng)廠模式。
為(wèi)什麽要使用(yòng)工(gōng)廠模式?
為(wèi)什麽要使用(yòng)設計模式衍生到為(wèi)什麽要使用(yòng)工(gōng)廠模式,也可(kě)以說使用(yòng)工(gōng)廠模式來創建實例的優勢。
什麽是工(gōng)廠模式?
簡單的說工(gōng)廠模式是我們最常用(yòng)的實例化對象模式了,是用(yòng)工(gōng)廠方法代替new操作(zuò)的一種模式。
工(gōng)廠模式分(fēn)為(wèi):簡單工(gōng)廠模式、工(gōng)廠方法模式和抽象工(gōng)廠模式。
使用(yòng)工(gōng)廠模式創建對象有(yǒu)什麽優勢?
1:解耦
2:易于維護(減少修改量降低錯誤出現的機率)
*本篇幅主要分(fēn)析如何使用(yòng)工(gōng)廠模式創建對象減少修改量降低錯誤出現的機率
定義
修改次數為(wèi)P;應用(yòng)次數為(wèi)N。
下面我們以輸出“小(xiǎo)米加步槍戰勝飛機和大炮”來對比工(gōng)廠模式在實際開發中(zhōng)帶來的優勢。
01 New關鍵字創建
要輸出“小(xiǎo)米加步槍戰勝飛機和大炮”的組合,一般我們的第一印象是使用(yòng)new關鍵字來創建對象進行組合,下面就叫我們來用(yòng)new關鍵字來實現。
new關鍵字實現:
對象變更産(chǎn)生的修改情況分(fēn)析
對“Xiaomi”對象改為(wèi)“ChianXiaomi”,此時要分(fēn)别對應用(yòng)一和應用(yòng)二中(zhōng)的對象名(míng)進行修改如下:
從new關鍵字創建類更改情況可(kě)以看出修改次數為(wèi)4次,即P = (N*2)次。
下面我們使用(yòng)工(gōng)廠模式來分(fēn)析修改次數P是多(duō)少
02 簡單工(gōng)廠模式
簡單工(gōng)廠實現:
對象變更産(chǎn)生的修改情況分(fēn)析
對“Xiaomi”對象改為(wèi)“ChianXiaomi”, 此時無需對應用(yòng)一和應用(yòng)二進行修改,隻需對創建Xiaomi對象的工(gōng)廠進行修改即可(kě)。
從普通工(gōng)廠模式對類更改情況可(kě)以看出修改次數為(wèi)1次,即P = 1次。
03 工(gōng)廠方法模式
工(gōng)廠方法模式實現:
對象變更産(chǎn)生的修改情況分(fēn)析
對“Xiaomi”對象改為(wèi)“ChianXiaomi”,此時無需對應用(yòng)一和應用(yòng)二進行修改,隻需要對創建Xiaomi對象的工(gōng)廠進行修改即可(kě)。
從工(gōng)廠方法模式對類更改情況可(kě)以看出修改次數為(wèi)1次,即P = 1次。
04 抽象工(gōng)廠模式
抽象工(gōng)廠模式實現:
對象變更産(chǎn)生的修改情況分(fēn)析
對“Xiaomi”對象改為(wèi)“ChianXiaomi”,此時無需對應用(yòng)一和應用(yòng)二進行修改,隻需要對創建Xiaomi對象的工(gōng)廠進行修改即可(kě)。
從抽象工(gōng)廠模式對類更改情況可(kě)以看出修改次數為(wèi)1次,即P = 1次。
把new關鍵字、普通工(gōng)廠模式、工(gōng)廠方法模式和抽象工(gōng)廠模式在2次應用(yòng)的修改情況進行對比
修改次數比較:
把new關鍵字、普通工(gōng)廠模式、工(gōng)廠方法模式和抽象工(gōng)廠模式在N次應用(yòng)的修改情況進行分(fēn)析得出
從創建對象實例對比和修改情況分(fēn)析可(kě)以看出,普通工(gōng)廠模式、工(gōng)廠方法模式和抽象工(gōng)廠模式的修改次數與應用(yòng)次數N無關,而new關鍵字修改次數是應用(yòng)次數N的2倍。所以對于應用(yòng)次數N(N>0)修改次數P的大小(xiǎo)依次為(wèi)new關鍵字創建>抽象工(gōng)廠模式=工(gōng)廠方法模式=普通工(gōng)廠模式。
對于實際工(gōng)作(zuò)中(zhōng)某個龐大複雜的系統而言,過多(duō)的實例化邏輯于宿主類中(zhōng)會給後期的維護與擴展帶來很(hěn)多(duō)麻煩,所以我們以後在開發過程中(zhōng)如果在遇到new關鍵字創建對象的時候,應該考慮下是否使用(yòng)工(gōng)廠模式來創建對象,以減少代碼的修改量來降低錯誤出現的概率。