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