AbstractFactory——抽象工廠

一、定義

       GOF裏對抽象工廠模式這樣定義:提供一個創建一系列相關或相互依賴對象的接口,而無需指定他們具體的類

        有時候,我們希望在爲客戶代碼提供實例化類的同時,能夠控制應該對哪個類進行實例化,這種情況下,可以使用工廠模式,如果

需要,還可以提供一個方法來利用外部因素確定應該實例化哪個類。但是有時候,這些用於控制對哪個類進行實例化的外部因素往往涉

及多個類,這些類組成一個系列。抽象工廠模式使得我們可以創建某個對象系列的多個對象,一組相互關聯或相互依賴的對象構成一個

對象系列。

二、應用場景

       考慮一個支持多種視感標準的用戶界面工具包,例如Motif和Presentation Manager。不同的視感風格爲諸如窗口、按鈕等用戶界

面“窗口組件”定義不同的外觀和行爲。爲了保證視感風格之間的可移植性,一個應用不應該爲一個特定的視感外觀硬編碼它的窗口組件。

       這裏我們可以用一個抽象的WidgetFactory類,這個類聲明瞭用來創建每一類基本窗口組件的接口。每一類窗口組件都有一個抽象

類,而具體子類則實現了窗口組件的特定視感風格。對於每一個抽象窗口組件類,WidgetFactory接口都有一個返回新窗口組件對象的操作。客戶調用這些操作以獲得窗口組件實例,但客戶並不知道他們正在使用的是哪一個具體類。

       抽象工廠類常常是一個工廠方法的集合。每種視感標準都對應一個具體的WidgetFactory子類。每個子類實現那些用於創建合適視

感風格的窗口組件的操作。WidgetFactory增強了具體窗口組件之間的依賴關係。一個Motif的滾動條應該和Motif按鈕,正文編輯器一起

使用,這一約束條件作爲使用MotifWidgetFactory的結果被自動加上。



三、類圖


四、與Builder的區別

       AbstractFactory類通常用工廠方法實現,也可以用Prototype實現,這在接下來的文章裏會介紹。Builder和AbstractFactory相似,

兩者都可以創建複雜對象。主要區別是Builder模式着重於一步一步構造一個複雜對象。而AbstractFactory着重於多個系列的產品對象。

Builder在最後一步返回產品,而對於AbstractFactory來說,產品是立刻返回的。Builder構造的最終產品之間差異可能會很大,而

AbstractFactory 構造的一系列組件有着相似的體系。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章