天天看點

設計模式學習(七):Abstract Factory動機模式定義舉例要點總結

說明:由于本人是一個初學者,是以部落格中用到的一些見解、圖檔、代碼或者說明可能引用網絡上面的資源,如果涉及到了侵權的問題請大家聯系我進行删除。

這一篇部落客要記錄了Abstract Factory(抽象工廠)模式的學習,Abstract Factory模式和之前的Factory Method模式非常相似,都是用于繞開new來進行對象建立,隻有些許不同。

動機

在軟體系統中,經常面臨着“一系列互相依賴的對象”的建立工作;同時,由于需求的變化,往往存在着更多系列對象的建立工作。

如何應對這種變化?如何繞開正常的對象建立方法(new),提供一種“封裝機制”來避免客戶程式和這種“多系列具體對象建立工作”的緊耦合?

模式定義

提供一個接口,讓該接口負責建立一系列“相關或者互相依賴的對象”,無需指定它們具體的類。

舉例

抽象工廠模式的結構圖如下所示:

設計模式學習(七):Abstract Factory動機模式定義舉例要點總結

在工廠方法模式裡面我們舉了一個關于單純的畜牧場的例子。這裡我們進行一下擴充,進行一個農場的建構:

分析:農場中除了像畜牧場一樣可以養動物,還可以培養植物,如養馬、養牛、種菜、種水果等,是以本執行個體比前面介紹的畜牧場類複雜,必須用抽象工廠模式來實作。

本例用抽象工廠模式來設計兩個農場,一個是韶關農場用于養牛和種菜,一個是上饒農場用于養馬和種水果,可以在以上兩個農場中定義一個生成動物的方法 newAnimal() 和一個培養植物的方法 newPlant()。

本例的結構圖如下所示:

設計模式學習(七):Abstract Factory動機模式定義舉例要點總結

要點總結

如果沒有應對“多系列對象建構”的需求變化,則沒有必要使用Abstract Factory模式,這時候使用簡單的工廠完全可以。

“系列對象”指的是在某一特定系列下的對象之間有互相依賴、或作用的關系。不同系列的對象之間不能互相依賴。

Abstract Factory模式主要在于應對“新系列”的需求波動。其缺點在于難以應對“新對象”的需求變動。

ps: 抽象工廠的核心或者說與普通的工廠方法的差別主要在于系列對象。其實工廠方法模式可以看作是抽象工廠模式的一個特例(工廠方法模式建立一個對象而抽象工廠模式建立一系列對象)。

繼續閱讀