📌 30 秒摘要(Layer 3)
把物件導向設計中反覆出現的問題,整理成 23 個有名字的解法(模式),分成創建型、結構型、行為型三類。但比模式本身更重要的是背後的兩條設計心法:針對介面編程,而非實作;優先使用物件組合,而非類別繼承。所有模式的本質,都是封裝變化——把會變的部分隔離起來。
🗺 心智圖(Canvas)
設計模式
Link to original
🧰 這本書給我的工具
設計心法(先於模式)
- 工具-針對介面編程 — 想降低耦合、讓實作可替換時
- 工具-優先組合而非繼承 — 在繼承與組合間抉擇時
- 工具-封裝變化點 — 設計時想預留變化彈性
🏗 創建型 Creational(5,管「怎麼建立物件」)
🧩 結構型 Structural(7,管「怎麼組合物件與類別」)
🔄 行為型 Behavioral(11,管「物件間怎麼分工與溝通」)
- 責任鏈模式 Chain of Responsibility、命令模式 Command、直譯器模式 Interpreter、迭代器模式 Iterator、中介者模式 Mediator、備忘錄模式 Memento、觀察者模式 Observer、狀態模式 State、策略模式 Strategy、範本方法模式 Template Method、訪問者模式 Visitor
✨ 關鍵重點(Layer 1–2)
- 三大類共 23 模式:創建型 5(Abstract Factory、Builder、Factory Method、Prototype、Singleton)、結構型 7(Adapter、Bridge、Composite、Decorator、Facade、Flyweight、Proxy)、行為型 11(Chain of Responsibility、Command、Interpreter、Iterator、Mediator、Memento、Observer、State、Strategy、Template Method、Visitor)。
- 兩條核心原則:針對介面編程、組合優於繼承。
- 共同本質:封裝變化——找出「會變的部分」把它隔離。
- 模式是「詞彙」:讓團隊用一個詞就溝通一整套設計。
- 幾組容易混淆的孿生:Strategy vs State(選演算法 vs 隨狀態換行為)、Decorator vs Proxy(加功能 vs 控制存取)、Adapter vs Bridge(事後轉介面 vs 事前分離抽象與實作)。
💬 金句原文(Layer 0)
- 「針對介面編程,而不是針對實作編程。」
- 「優先使用物件組合,而非類別繼承。」
🔗 相關
- 更好上手的教學版見 HeadFirst 設計模式(同樣的模式 + 設計原則)