設計模式 - 工廠三兄弟

f1uLove發表於2019-01-28

簡單工廠模式、工廠方法模式、抽象工廠模式都屬於建立型模式。這三個模式都是為了解決物件的建立而生。這三個工廠模式就像孿生兄弟一樣,總是讓人傻傻分不清楚。今天就依據個人理解對三個模式總結對比一下。

一、定義

模式 定義
簡單工廠 別名靜態工廠方法(Static Factory Method)模式。在簡單工廠模式中,可以根據引數的不同返回不同類的例項。
工廠方法 定義一個建立物件的介面,讓子類決定例項化哪一個類。工廠方法使一個類的例項化延遲到其子類。
抽象工廠 提供一個建立一系列相關或相互依賴物件的介面,而無需指定它們的具體類。

二、結構

簡單工廠
工廠方法
抽象工廠

三、角色關係

簡單工廠 工廠方法 抽象工廠
工廠角色
抽象產品角色
抽象產品
  _ 具象產品
抽象工廠
  _ 具象工廠
抽象產品
  _ 具象產品
抽象工廠
  _ 具象工廠

四、總結

簡單分析三種模式的結構圖以及所擁有的結構關係,我們不難看出三種模式的不同點:

  • 建立過程
簡單工廠 工廠方法 抽象工廠
建立過程 由工廠內部直接根據不同條件建立 定義一個抽象建立產品介面,將例項化過程延遲到子類 提供一個建立一系列或者相關依賴物件的介面,有子類實現例項化
區別 1.將客戶端判斷邏輯抽象到工廠內
2.用來生產同一等級結構中的任意產品,無法新增產品
1.判斷邏輯依舊在客戶端
2.用來生產同一等級結構中的固定產品,可任意增加新產品
1.判斷邏輯依舊在客戶端
2.用來生產不同產品族的全部產品,不可任意增加新產品,可新增任意產品族
  • 工廠模式的退化 當抽象工廠模式中每一個具體工廠類只建立一個產品物件,也就是隻存在一個產品等級結構時,抽象工廠模式退化成工廠方法模式;當工廠方法模式中抽象工廠與具體工廠合併,提供一個統一的工廠來建立產品物件,並將建立物件的工廠方法設計為靜態方法時,工廠方法模式退化成簡單工廠模式。

以上三種工廠 方法在等級結構和產品族這兩個方向上的支援程度不同。所以要根據情況考慮應該使用哪種方法。

相關文章