是什麼
是工廠方法設計模式的一種擴充套件。當有多個抽象角色時,使用的一種工廠模式。
抽象工廠
產品族和等級結構示意圖
產品等級結構:產品等級結構即產品的繼承結構(三種品牌汽車構成了三個不同的產品等級結構)
產品族:在抽象工廠模式中,產品族是指由同乙個工廠生產的,位於不同產品等級結構中的一組產品。比如(suv工廠裡生產的三個品牌車型)
怎麼用第三年:audi,benz,bmw告訴廠長,我們這次的訂單需要分成suv,business,sport三種型別的車。這時候管理蠻不過來了。所以廠子又請了兩個管理。分別管理三個品牌的車子。
// 抽象工廠兩種情況同工廠方法上
// method 1
suvfactory *suvf =[[
suvfactory alloc] init]
;[suvf createaudicar]
;// method 2
abstractfactorys *af =[[
sportsfactorys alloc] init]
;[af createaudifactoy]
;
#import
@inte***ce abstractfactorys : nsobject
//抽象工廠(三個管理者)-(
void
)createbenzfactoy;-(
void
)createbmwfactoy;-(
void
)createaudifactoy;
@end
#import "suvfactory.h"
//具體工廠
@implementation suvfactory-(
void
)createbenzcar-(
void
)createbwmcar-(
void
)createaudicar
@end
為什麼
抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是乙個產品等級結構,而抽象工廠模式需要面對多個產品等級結構,乙個工廠等級結構可以負責多個不同產品等級結構中的產品物件的建立。當乙個工廠等級結構可以建立出分屬於不同產品等級結構的乙個產品族中的所有物件時,抽象工廠模式比工廠方法模式更為簡單、更有效率,如使用工廠方法模式,上圖所示結構需要提供15個具體工廠,而使用抽象工廠模式只需要提供3個具體工廠。
當增加新的產品族的時候,符合「開閉原則」,只需讓產品繼承相應的抽象產品,物件的工廠繼承抽象工廠即可,而無需修改其他的**。
當增加產品等級結構的時候,不符合「開閉原則」,如新新增大眾,那麼在soprt,suv,business三個具體工廠裡面都進行修改。當然我們可以配合反射機制來對抽象工廠進行優化。
//根據字串來建立類
nsclassfromstring
()```
----
###總結
簡單工廠啟示是工廠方法的一種極端實現,工廠方法是抽象方法的一種極端實現。在實際專案中,如果不是專案過大或者功能過於複雜,抽象工廠設計模式一般使用不到。簡單工廠模式反而是用的比較頻繁。但是這種思想我們還是需要借鑑的。在cocoa touch框架中的'類簇'便是基於抽象工廠模式設計。nsnumber就是最好的例子。
nsnumber *boolnumber =
[nsnumber numberwithbool:yes]
;nslog
(@"%@",[
[boolnumber class] description]
);
// 輸出 __nscfboolean
nslog(@"%d",[boolnumber boolvalue]);
//輸出1
nsnumber(抽象工廠)->nscfboolean(具體工廠子類)-> 過載boolvalue工廠方法 ->返回實際產品
這種設計多型別的物件的建立。好的模式應該是變成一種抽象,不暴露建立過程中任何不必要的細節和建立物件的具體型別。
ps:最後廠長去打lol了
都看到最後了還不給個喜歡麼……
建立型模式 工廠模式and抽象工廠模式
意圖 定義乙個建立物件的介面,讓其子類自己決定例項化哪乙個工廠類,工廠模式使其建立過程延遲到子類進行。主要解決 主要解決介面選擇的問題。何時使用 我們明確地計畫不同條件下建立不同例項時。如何解決 讓其子類實現工廠介面,返回的也是乙個抽象的產品。關鍵 建立過程在其子類執行。步驟 建立乙個介面 形狀sh...
建立型模式(抽象工廠模式)
目錄總結 當系統所提供的工廠所需生產的具體產品並不是乙個簡單的物件,而是多個位於不同產品等級結構中屬於不同型別的具體產品時需要使用抽象工廠模式。抽象工廠模式是所有形式的工廠模式中最為抽象和最具一般性的一種形態。抽象工廠模式與工廠方法模式最大的區別在於,工廠方法模式針對的是乙個產品等級結構,而抽象工廠...
建立型模式 抽象工廠模式
抽象工廠 abstractfactory 模式的定義 是一種為訪問類提供乙個建立一組相關或相互依賴物件的介面,且訪問類無須指定所要產品的具體類就能得到同族的不同等級的產品的模式結構。抽象工廠模式是工廠方法模式的公升級版本,工廠方法模式只生產乙個等級的產品,而抽象工廠模式可生產多個等級的產品。產品族 ...