抽象工廠模式(abstract factory pattern):提供乙個建立一系列相關或相互依賴物件的介面,而無須指定它們具體的類。抽象工廠模式又稱為kit模式,屬於物件建立型模式。
看完這段話,我也是有點懵。所以簡單闡述一下我對抽象工廠模式的理解:
抽象工廠模式有大致4個角色:
1.抽象工廠:方法功能為生產產品,注意:將來例項化的類(工廠),生產的是乙個品牌的一系列東西,比如小公尺廠只生產小公尺的東西(抽象工廠模式的特點)
2.具體工廠:實現抽象工廠以及其方法
3.抽象產品:你可以將它想象成任何乙個東西,萬物皆可抽(當然這裡只指抽象)
4.具體產品:比如小公尺電視,小公尺冰箱等(這裡指的產品屬於乙個品牌)又是這個模式的特點。
看完上面的話,你會發現,有乙個特點,就是乙個工廠只生產一種品牌的一系列東西。這時候就需要引入新概念了:
產品等級結構:產品等級結構即產品的繼承結構,例如乙個抽象類是電視機,其子類有海爾電視機、海信電視機、tcl電視機,則抽象電視機與具體品牌的電視機之間構成了乙個產品等級結構,抽象電視機是父類,而具體品牌的電視機是其子類。
產品族:在抽象工廠模式中,產品族是指由同乙個工廠生產的,位於不同產品等級結構中的一組產品,例如海爾電器工廠生產的海爾電視機、海爾電冰箱,海爾電視機位於電視機產品等級結構中,海爾電冰箱位於電冰箱產品等級結構中。
概念很多,但是其實很簡單。
同一產品等級結構其實就是同一種東西,比如上面說的電視產品等級結構!
同一產品族其實就是同一品牌,比如上面說的海信族,海爾族等
它們二者的關係如下圖:
看到這裡是不是很清晰了呢!
下面我用乙個例項來加深了解一下:
例項:現有倆種工廠:
pc工廠,mac工廠,有倆種產品:記憶體和cpu
現在模擬抽象工廠模式設計模式生產產品!
抽象工廠:abfactory 抽象方法功能:建立乙個工廠
具體工廠:pcfactory,macfactory
抽象產品:cpu,ram
具體產品:
(pc牌)pccpu,pcram
(mac牌)maccpu,macram
pcfactory生產pc牌,macfactory生產mac牌
也就是乙個工廠生產乙個產品族不同產品等級結構的產品!
uml圖了解一下大概架構:
完成後,我們在client客戶端裡建立乙個抽象產品,抽象工廠,
然後建立乙個pcfactory工廠或者macfactory,賦值給抽象工廠,將來呼叫方法時呼叫的是具體工廠的方法!
將pcfactory改為macfactory
總的來說,抽象工廠模式增加新的產品族是很方便的,比如要增加乙個新品牌慶狗(這是我的舍友外號哈哈),你只需要要新增新工廠(慶狗工廠),新產品(慶狗cpu,慶狗ram),讓這個工廠生產這個產品族就好。
但是如果要增加新的產品等級結構就要進行大幅改動,要改動抽象級別(父類級別)的東西,比如要增加乙個手機產品,你需要增加抽象工廠中的方法來生產手機!
涉及到抽象層改動太大。
總結:
抽象工廠模式優點:
(1)隔離了具體類的生成,使得客戶端並不需要知道什麼被建立。
(2)當乙個產品族中的多個物件被設計成一起工作時,它能夠保證客戶端始終只使用同乙個產品族中的物件。
(3)增加新的產品族很方便,無須修改已有系統,符合開閉原則。
抽象工廠模式缺點:
(1)增加新的產品等級結構麻煩,需要對原有系統進行較大的修改,甚至需要修改抽象層**,這顯然會帶來較大的不便,違背了開閉原則。
abstractory:
package abstractfactory;
public
inte***ce
abfactory
cpu:
package abstractfactory;
public
inte***ce
cpu
ram:
package abstractfactory;
public
inte***ce
ram
pccpu:
package abstractfactory;
public
class
pccpu
implements
cpu}
maccpu:
package abstractfactory;
public
class
maccpu
implements
cpu}
pcram:
package abstractfactory;
public
class
pcram
implements
ram}
macram:
package abstractfactory;
public
class
macram
implements
ram}
client:
package abstractfactory;
public
class
client
}
pcfactory:
package abstractfactory;
public
class
pcfactory
implements
abfactory
@override
public ram productram()
}
macfactory:
package abstractfactory;
public
class
macfactory
implements
abfactory
@override
public ram productram()
}
參考**效果更好哦! 抽象工廠模式 設計模式3之抽象工廠模式
工廠方法模式中工廠只負責同類產品的生產。比如電視機工廠不應該生產汽車。然而現實生活中有很多綜合型的工廠,比如有些電視工廠不僅生產電視機,還會生產與之配套的機頂盒。那麼抽象工廠模式隨之誕生,這種模式將考慮多種型別產品的生產。我們總結下 工廠方法模式只考慮成產同一等級級的產品抽象方法模式考慮生產多等級的...
設計模式之抽象工廠模式
目標 定義了乙個建立一系列相關或相互依賴的介面,而無需指定它們的具體類。用於交換產品系列,如 access sql server 產品的具體類名被具體工廠的實現分離 下面是示例 include include include using namespace std 使用者抽象介面 class ius...
設計模式之抽象工廠模式
定義 abstract factory,提供乙個建立一系列相關或相互依賴物件的介面,而無需制定它們具體的類 場景 有一家生產螺絲螺帽的工廠,螺絲有兩種型號 公的和母的,螺帽也有兩種型號 公的和母的。沒個車間只生產一種螺絲和螺帽。這裡車間就是乙個concretefactory 具體工廠 螺絲和螺帽便是...