【重溫設計模式】之004抽象工廠模式
阿新 • • 發佈:2020-08-06
抽象工廠模式
基本原理
含義
抽象工廠模式,即Abstract Factory Pattern,提供一個建立一
系列
相關或相互依賴物件的介面,
而無須指定它們具體的類;具體的工廠負責實現具體的產品例項。
解決的問題
即工廠方法模式的缺點: 每個工廠只能建立一類產品
組成部分
組成 | 關係 | 作用 |
---|---|---|
抽象產品(IProduct) | 產品頂級抽象父類 | 描述產品的公共介面 |
抽象子產品(IxxProduct) | 具體產品類的父類,頂級抽象父類的子類 | 描述相對具體的抽象產品的公共介面 |
具體產品(XxProduct) | 具體產品類,抽象父類的子類 | 描述具體的產品 |
抽象工廠(Factory) | 具體工廠的父類 | 描述工廠的公共介面 |
具體工廠(XxFactory) | 具體工廠類,抽象工廠的子類 | 描述具體工廠 |
UML類圖
使用步驟
- 建立產品標準
- 建立產品抽象類(一系列相關的產品)
- 建立具體產品類
- 建立工廠標準
- 建立生產具體產品的工廠
優點
- 低耦合
將具體產品的建立延遲到子類。
- 更符合開閉原則
新增系列相關產品時,只需要增加具體的工廠和工廠需要生產的具體產品即可。
- 符合單一職責原則,
每個具體工廠類只負責建立對應的產品
缺點
抽象工廠模式很難支援新種類產品的變化。
這是因為抽象工廠介面中已經確定了可以被建立的產品集合,
如果需要新增新產品,此時就必須去修改抽象工廠的介面,這樣就涉及到抽象工廠類的以及所有子類的改變,
這樣也就違背了“開發——封閉”原則。
適用場景
- 一個系統不依賴產品類例項的建立和組合。
- 這個系統有多個系列的產品,而系統中只能消費其中的一系列產品。
- 系統要求提供一個產品類的庫,所有產品以同樣的接口出現,客戶端不需要依賴具體實現。
總結
盡信書不如無書,任何脫離實際業務的架構都是在耍流氓;
所謂原則,只是為了更好地為我們服務;
具體如何應用需要我們在業務實踐中靈活把控。