【重溫設計模式】之003工廠方法模式

ithinksky發表於2020-08-06

【重溫設計模式系列原始碼】

工廠方法模式

基本原理

含義

工廠方法模式又稱為工廠模式、多型工廠模式和虛擬構造器模式。
通過定義工廠父類負責定義建立物件的公共介面,而子類則負責生成具體的物件。

解決的問題

即簡單工廠模式的缺點
工廠一旦需要生產新產品就需要修改工廠類的方法邏輯,違背了“開放 - 關閉原則

言外意:

工廠標準有了,產品標準有了,要想生產新的商品,需要開闢新的工廠生產新的商品。
雖然解決了簡單工廠模式的“開閉原則”問題,但同時增加了額外開銷。

簡單工廠模式 是一個單一的工廠,如果需要提供新的產品,需要將工廠進行改造,
可以認為需要擴充套件一條流水線. 資源利用率的把控 凡事皆有度。

組成部分

組成 關係 作用
產品標準 具體產品的父類 描述產品的公共介面
具體產品 產品標準的具體實現類 描述生產的具體產品
工廠標準 具體工廠的父類 描述工廠的公共介面
具體工廠 工廠標準的具體實現類 描述生產的具體產品的工廠

UML類圖

工廠方法模式UML類圖

使用步驟

  1. 建立產品標準 (描述產品的公共介面)
  2. 建立具體產品類 (描述生產的具體產品)
  3. 建立工廠標準(描述工廠的公共介面)
  4. 建立具體工廠類(描述生產的具體產品的工廠)
  5. 外界通過呼叫具體工廠類的方法,從而建立不同具體產品類的例項

優點

  • 更符合開-閉原則

新增一種產品時,只需要增加相應的具體產品類和相應的工廠子類即可

  • 符合單一職責原則

每個具體工廠類只負責建立對應的產品

缺點

新增新產品時,除了增加新產品類外,還要提供與之對應的具體工廠類,系統類的個數將成對增加,在一定程度上增加了系統的複雜度;
同時,有更多的類需要編譯和執行,會給系統帶來一些額外的開銷;

雖然保證了工廠方法內的對修改關閉,但對於使用工廠方法的類,如果要更換另外一種產品,仍然需要修改例項化的具體工廠類;

一個具體工廠只能建立一種具體產品

適用場景

  • 當一個類不知道它所需要的物件的類時

在工廠方法模式中,客戶端不需要知道具體產品類的類名,只需要知道所對應的工廠即可;

  • 當一個類希望通過其子類來指定建立物件時

在工廠方法模式中,對於抽象工廠類只需要提供一個建立產品的介面,而由其子類來確定具體要建立的物件,
利用物件導向的多型性和里氏代換原則,在程式執行時,子類物件將覆蓋父類物件,從而使得系統更容易擴充套件。

  • 靈活配置

將建立物件的任務委託給多個工廠子類中的某一個,客戶端在使用時可以無須關心是哪一個工廠子類建立產品子類,
需要時再動態指定,可將具體工廠類的類名儲存在配置檔案或資料庫中。

總結

盡信書不如無書,任何脫離實際業務的架構都是在耍流氓;
所謂原則,只是為了更好地為我們服務;
具體如何應用需要我們在業務實踐中靈活把控。

相關文章