設計模式(Design Patterns) – Abstract Factory (抽象工廠)

Factory

在物件導向世界裡,具體製造出物件或類別的地方。


Abstract Factory

以相同的介面來建立一整族相關或相依的物件,不須點明各物件真正所屬的具象類別。


範例

以 GUI 為例 Windows 陣營 跟 Apple 都有各自的 GUI

而你的功能已經定義了需要實作的 GUI

 

抽象工廠的想法即是,建立一個抽象類別 WidgetFactory (GUI 定義) ,各別實作 Windows 與 Apple 的工廠

1. 建立 Windows

2. 建立 Windows 與 Apple


優點

將具象類別隔開來

由於 Client 只能經由抽象介面來操作這些物件, 成品類別 被 ConcreteFactory 隱藏起來。

 

易於整組成品物件抽換掉

如果今天新增了一個 Android 版本 只需要根據 WidgetFactory 實做一個 AndroidWidgetFactory,並抽換掉即可。

一致性

確保應用程式同一時間只會使用到某一物件陣營。

即在 Windows 系統只會用到 WindowsWidgetFactory  及底下產生的物件,Apple 系統只會用到 AppleWidgetFactory 及底下產生的物件。


缺點

難以提供新的成品物件種類

如果今天要新增一個彈跳視窗(PopupWindow)

 – 你必須在抽象類別 WidgetFactory 新增該方法

 – 並在所有的實作,如 WindowsWidgetFactory、AppleWidgetFactory、AndroidWidgetFactory 實作方法

 – 最後,建立物件的介面,然後再根據每一個工廠,建立物品的實體。


其他

實際應用時,為了確保應用程式同一時間只會使用到某一物件陣營這件事,可以搭配 Singleton (單一模式),確保同一時間只有一個實體物件。

 

 

 

 

 

 

print

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *