簡單工廠模式、工廠方法模式、抽象工廠模式都屬于創建型模式。這三個模式都是為了解決對象的創建而生。這三個工廠模式就像孿生兄弟一樣,總是讓人傻傻分不清楚。今天就依據個人理解對三個模式總結對比一下。
一、定義
模式 | 定義 |
---|---|
簡單工廠 | 別名靜態工廠方法(Static Factory Method )模式。在簡單工廠模式中,可以根據參數的不同返回不同類的實例。 |
工廠方法 | 定義一個創建對象的接口,讓子類決定實例化哪一個類。工廠方法使一個類的實例化延遲到其子類。 |
抽象工廠 | 提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們的具體類。 |
二、結構
簡單工廠
工廠方法
抽象工廠
三、角色關系
簡單工廠 | 工廠方法 | 抽象工廠 |
---|---|---|
工廠角色 抽象產品角色 |
抽象產品 ? _ 具象產品 抽象工廠 ? _ 具象工廠 |
抽象產品 ? _ 具象產品 抽象工廠 ? _ 具象工廠 |
四、總結
簡單分析三種模式的結構圖以及所擁有的結構關系,我們不難看出三種模式的不同點:
- 創建過程
簡單工廠 | 工廠方法 | 抽象工廠 | |
---|---|---|---|
創建過程 | 由工廠內部直接根據不同條件創建 | 定義一個抽象創建產品接口,將實例化過程延遲到子類 | 提供一個創建一系列或者相關依賴對象的接口,有子類實現實例化 |
區別 | 1.將客戶端判斷邏輯抽象到工廠內 2. 用來生產同一等級結構中的任意產品,無法新增產品
|
1.判斷邏輯依舊在客戶端 2. 用來生產同一等級結構中的固定產品,可任意增加新產品
|
1.判斷邏輯依舊在客戶端 2. 用來生產不同產品族的全部產品,不可任意增加新產品,可添加任意產品族
|
-
工廠模式的退化
當抽象工廠模式中每一個具體工廠類只創建一個產品對象,也就是只存在一個產品等級結構時,抽象工廠模式退化成工廠方法模式;當工廠方法模式中抽象工廠與具體工廠合并,提供一個統一的工廠來創建產品對象,并將創建對象的工廠方法設計為靜態方法時,工廠方法模式退化成簡單工廠模式。
以上三種工廠 方法在等級結構和產品族這兩個方向上的支持程度不同。所以要根據情況考慮應該使用哪種方法。