本章主軸#
工廠這一部結尾總結。把建立、使用、管理三件事拆乾淨,就能在不破壞既有結構的前提下擴充軟體。
三件事,三個視角#
| 任務 | 主要工具 |
|---|---|
| 識別物件(依職責) | 共通與差異分析(CVA) |
| 決定物件之間怎麼互動 | 多數設計模式 |
| 決定物件如何被建立與管理 | 工廠 |
第三件事——管理——是新加入的視角。把它從「使用」中分離,能讓最複雜的部分維持在概念層次,遵守 OCP、依賴倒置與 Liskov 替換。
為什麼把「使用」與「管理」徹底分開?#
- 使用方專注於概念與抽象,不需知道具體類別
- 工廠承擔「哪個情境用哪個物件」「需要幾個」「如何回收」「如何錯誤處理」
- 兩者修改路徑互不干擾——維護成本顯著下降
把工廠想成「物件管理員(object managers)」更貼切——建立只是它眾多職責之一。
兩段式重構手法#
加新功能時:
- 先重構(不加新功能),在受影響區建立可插拔的「位置」
- 把新功能塞進去——只動工廠與新類別
這就是 OCP 在實務中的落地步驟。工廠模式提供了「可插拔位置」最自然的容身之所。
規模隨設計成長#
- 初期:直接在類別本身用 static method 即可
- 中期:把規則寫死在獨立的工廠物件
- 後期:規則太多時改用設定檔、資料庫、動態類別載入
不論演化到哪一階段,工廠都讓「規則邏輯」與「使用邏輯」維持鬆耦合。
一句話總結整本書的核心心法#
任意兩個實體 A 與 B:A 使用 B、或 A 建立/管理 B,但不能同時兩者。
本章重點#
- 設計分三個視角:找物件、定關係、管實例
- 工廠是「管」這件事的家
- 重構手法兩段式:先開出位置,再放進去
- 工廠規模可隨需求漸進演化,使用方代碼幾乎不必動