工廠方法模式(Factory Method Pattern)

定義

工廠方法模式的核心思想是:

定義一個用於創建物件的介面,但由子類別決定要實例化哪一個類別。工廠方法將物件的實例化延遲到子類別進行。

工廠通常是一種用來建立其他對象的類別,它是建構物件的一種抽象方式,可根據不同的條件產出不同的實例。工廠模式的主要目的在於封裝創建邏輯,讓物件的創建與使用解耦。


工廠模式的種類與概念

1. 簡單工廠模式(Simple Factory)

  • 又稱為靜態工廠模式,通常工廠本身是一個靜態方法。
  • 同一個工廠內所建立的物件通常會有共同的父類別(或介面)
  • 將物件創建邏輯集中在一個地方。
  • 使用者只需傳入參數即可獲得所需的物件,不需了解實際的創建細節

優點:簡單易懂、集中管理實例化邏輯。
缺點:違反開放封閉原則,當要新增新類別時需要修改工廠邏輯。

2. 工廠方法模式(Factory Method)

  • 定義一個工廠的抽象介面,再由子類別實作該介面來決定要建立哪一種具體類別的物件。
  • 將實例化邏輯延遲到子類別實作中進行,使得主流程與創建細節分離。
  • 增強了彈性與可擴充性,符合開放封閉原則。

優點:支援物件的延遲實例化,方便擴展。
缺點:需要為每一個新類別建立對應的工廠類別,增加類別數量。

3. 抽象工廠模式(Abstract Factory)

  • 一組工廠方法的集合,用來建立一系列相關或相依的物件,而不需要指定具體的類別。
  • 將「產品族群」的建立邏輯進行分組管理。
  • 通常會搭配一組產品介面來定義其組成。

優點:能產出多個相關物件的集合,確保產品間的相容性。
缺點:系統複雜性提高,不易新增新的產品品項。


總結比較

模式 特點 優點 缺點
簡單工廠 根據參數決定建立哪個類別 結構簡單、集中管理 不符合開放封閉原則
工廠方法 將實例化交由子類別處理 符合開放封閉原則、可擴充 增加子類別數量
抽象工廠 建立一系列相關的物件,封裝產品族 保持產品族一致性、良好擴展性 結構較複雜、不易支援新產品族

使用時機

  • 當系統需要將物件創建邏輯與使用者邏輯分離時。
  • 當需要依據不同條件產出不同型態的物件。
  • 當系統中的物件建立邏輯較為複雜或多樣化。

延伸閱讀