模式的定義與特點(diǎn)
抽象工廠(AbstractFactory)模式的定義:是一種為訪問類提供一個創(chuàng)建一組相關(guān)或相互依賴對象的接口,且訪問類無須指定所要產(chǎn)品的具體類就能得到同族的不同等級的產(chǎn)品的模式結(jié)構(gòu)。
抽象工廠模式是工廠方法模式的升級版本,工廠方法模式只生產(chǎn)一個等級的產(chǎn)品,而抽象工廠模式可生產(chǎn)多個等級的產(chǎn)品。
使用抽象工廠模式一般要滿足以下條件。
系統(tǒng)中有多個產(chǎn)品族,每個具體工廠創(chuàng)建同一族但屬于不同等級結(jié)構(gòu)的產(chǎn)品。
系統(tǒng)一次只可能消費(fèi)其中某一族產(chǎn)品,即同族的產(chǎn)品一起使用。
抽象工廠模式除了具有工廠方法模式的優(yōu)點(diǎn)外,其他主要優(yōu)點(diǎn)如下。
可以在類的內(nèi)部對產(chǎn)品族中相關(guān)聯(lián)的多等級產(chǎn)品共同管理,而不必專門引入多個新的類來進(jìn)行管理。
當(dāng)需要產(chǎn)品族時,抽象工廠可以保證客戶端始終只使用同一個產(chǎn)品的產(chǎn)品組。
抽象工廠增強(qiáng)了程序的可擴(kuò)展性,當(dāng)增加一個新的產(chǎn)品族時,不需要修改原代碼,滿足開閉原則。
其缺點(diǎn)是:當(dāng)產(chǎn)品族中需要增加一個新的產(chǎn)品時,所有的工廠類都需要進(jìn)行修改。增加了系統(tǒng)的抽象性和理解難度。
模式的結(jié)構(gòu)與實(shí)現(xiàn)
抽象工廠模式同工廠方法模式一樣,也是由抽象工廠、具體工廠、抽象產(chǎn)品和具體產(chǎn)品等 4 個要素構(gòu)成,但抽象工廠中方法個數(shù)不同,抽象產(chǎn)品的個數(shù)也不同。現(xiàn)在我們來分析其基本結(jié)構(gòu)和實(shí)現(xiàn)方法。
1. 模式的結(jié)構(gòu)
抽象工廠模式的主要角色如下。
抽象工廠(Abstract Factory):提供了創(chuàng)建產(chǎn)品的接口,她包含多個創(chuàng)建產(chǎn)品的方法 newProduct(),可以創(chuàng)建多個不同等級的產(chǎn)品。
具體工廠(Concrete Factory):主要是實(shí)現(xiàn)抽象工廠中的多個抽象方法,完成具體產(chǎn)品的創(chuàng)建。
抽象產(chǎn)品(Product):定義了產(chǎn)品的規(guī)范,描述了產(chǎn)品的主要特性和功能,抽象工廠模式有多個抽象產(chǎn)品。
具體產(chǎn)品(ConcreteProduct):實(shí)現(xiàn)了抽象產(chǎn)品角色所定義的接口,由具體工廠來創(chuàng)建,她同具體工廠之間是多對一的關(guān)系。
抽象工廠模式的結(jié)構(gòu)圖如圖 2 所示。
2. 模式的實(shí)現(xiàn)
從圖 2 可以看出抽象工廠模式的結(jié)構(gòu)同工廠方法模式的結(jié)構(gòu)相似,不同的是其產(chǎn)品的種類不止一個,所以創(chuàng)建產(chǎn)品的方法也不止一個。下面給出抽象工廠和具體工廠的代碼。
- 抽象工廠:提供了產(chǎn)品的生成方法。
- 具體工廠:實(shí)現(xiàn)了產(chǎn)品的生成方法。
來源:http://c.biancheng.net/view/1351.html