---
# System prepended metadata

title: 抽象工廠模式

---

# 抽象工廠模式
### 抽象工廠方法 / 工廠方法
1. 目標：若此時想要將產品內部來源細分時
2. 問題：**造成太多工廠方法而難以維護**
3. 解決：使用抽象工廠

![](https://i.imgur.com/xWg8LBk.png)


**抽象工廠模式：提供一個介面來建立相關或相依的物件家族，而不需要指定具體類別**
* 讓客戶端使用抽象介面來建立一組相關產品，而無需知道實際的具體產品為何。意味著用戶端與具體產品的任何細節解耦合。

---
### 抽象工廠方法? 工廠方法?

![](https://i.imgur.com/cjeXJ73.png)

產品等級結構：產品的繼承結構。
產品族：同一個工廠生產的所有產品，而每一個產品分別在不同產品等級結構中。

**工廠責任從生產產品變成生產一個產品族**

---

### 抽象工廠優缺點
1. 同性質產品集中管理，確保客戶端可以得到同一產品族內的對象
2. 將客戶端與產品代碼解隅
3. 單一職責
4. 開閉原則
5. 開閉原則傾斜性

---

### 比較抽象工廠與工廠方法

|          |        工廠方法        |               抽象工廠               |
|:--------:|:----------------------:|:------------------------------------:|
| 實行方法 |          繼承          |               物件組合               |
|   目的   | 類別實例化推遲到子類別 | 建立相關物件，而不依靠它們的具體類別 |
