PHP 設計模式 – 工廠方法模式(Factory Method Pattern)

  • 工廠方法模式:通過選取相關的實例化方法來滿足組件的調用請求,而調用組件不需要了解具體的實例化細節。
  • 什麼時候可以用:當存在多個類共同實現一個協議或者共同繼承一個類的時候,可以使用「工廠方法模式」。

餅乾店

今天我們在一家非常有名的餅乾店工作,我們不僅生產各種餅乾,並且還提供包裝服務。

餅乾店的產品分成三種類型:

  • Small Product – 5 片以下,包裝費 10 元。
  • Big Product – 6~10 片,包裝費 20 元。
  • Large Product – 11 ~15 片,包裝費 30 元。

現在店裏接到一系列訂單,餅乾數量分別為:

需要你幫忙產出對應的 Product Array, 最後 print 出每一個商品含包裝的價格。

員工收到訂單後馬上開始生產

定義盒子的類型

定義 Product 基礎類

定義三種 Product

最後根據訂單的數量去實例化不同大小的產品,放在 products 中

分別 print 出每一個產品包含包裝的價格

這樣似乎就完成了,但如果餅乾店對於不同產品數量的規則改變時該怎麼辦呢?

比如不同包裝的餅乾數量改變了:

  • SmallProduct – 0 到 15 個餅乾
  • BigProduct – 16 到 20 個餅乾
  • LargeProduct – 21 到 30 個餅乾

這時候原本的 code 就要從

都修改成 SmallProduct

每一次規則改變都要手動去修改對應的類別,有沒有更好的作法呢?

改良版作法

我們將「選擇實例化的對象」以及具體「實例化的過程」給包裝了起來,於是調用組件僅需要告訴工廠餅乾的數量就可以取得不同類型的產品。

我們建立一個工廠 ProductFactory, 並提供一個生產邏輯

每當生產規則改變的時候,就只需要去修改 ProductFactory 就搞定了。

我們常常在一個項目中有時會定義幾種 UIButton 類型、UITextField 類型,甚至UILabel 類型,也都可以通過工廠方法模式來生產所需要的組件。


其他參考

發佈留言

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