本文為「無廢話 C# 設計模式」系列的總結篇,針對 GOF 23 種經典設計模式進行比較、原則對應與學習心得整理。文中觀點基於個人實務經驗與 C# 語言特性,僅供參考。
| 設計模式 | 常用程度 | 適用層次 | 引入時機 | 結構複雜度 |
|---|---|---|---|---|
| Abstract Factory | 比較常用 | 應用級 | 設計時 | 比較複雜 |
| Builder | 一般 | 代碼級 | 編碼時 | 一般 |
| Factory Method | 很常用 | 代碼級 | 編碼時 | 簡單 |
| Prototype | 不太常用 | 應用級 | 編碼時、重構時 | 比較簡單 |
| Singleton | 很常用 | 代碼級、應用級 | 設計時、編碼時 | 簡單 |
| Adapter | 一般 | 代碼級 | 重構時 | 一般 |
| Bridge | 一般 | 代碼級 | 設計時、編碼時 | 一般 |
| Composite | 比較常用 | 代碼級 | 編碼時、重構時 | 比較複雜 |
| Decorator | 一般 | 代碼級 | 重構時 | 比較複雜 |
| Facade | 很常用 | 應用級、架構級 | 設計時、編碼時 | 簡單 |
| Flyweight | 不太常用 | 代碼級、應用級 | 設計時 | 一般 |
| Proxy | 比較常用 | 應用級、架構級 | 設計時、編碼時 | 簡單 |
| Chain of Responsibility | 不太常用 | 應用級、架構級 | 設計時、編碼時 | 比較複雜 |
| Command | 比較常用 | 應用級 | 設計時、編碼時 | 比較簡單 |
| Interpreter | 不太常用 | 應用級 | 設計時 | 比較複雜 |
| Iterator | 一般 | 代碼級、應用級 | 編碼時、重構時 | 比較簡單 |
| Mediator | 一般 | 應用級、架構級 | 編碼時、重構時 | 一般 |
| Memento | 一般 | 代碼級 | 編碼時 | 比較簡單 |
| Observer | 比較常用 | 應用級、架構級 | 設計時、編碼時 | 比較簡單 |
| State | 一般 | 應用級 | 設計時、編碼時 | 一般 |
| Strategy | 比較常用 | 應用級 | 設計時 | 一般 |
| Template Method | 很常用 | 代碼級 | 編碼時、重構時 | 簡單 |
| Visitor | 一般 | 應用級 | 設計時 | 比較複雜 |
註:常用程度、適用層次、引入時機基於個人理解;結構複雜度以 C# 語言為基準。所有內容僅供參考。
| 設計模式 | 封裝的變化 | 實現方式 | 體現的核心原則 |
|---|---|---|---|
| Abstract Factory | 產品家族擴展 | 封裝產品族系列的創建 | 開閉原則 |
| Builder | 對象構建過程變化 | 封裝對象的構建過程 | 開閉原則 |
| Factory Method | 子類實例化 | 將對象創建延遲到子類 | 開閉原則 |
| Prototype | 實例化的類別 | 封裝原型拷貝 | 依賴倒置原則 |
| Singleton | 唯一實例 | 封裝對象產生個數 | — |
| Adapter | 對象介面變化 | 介面轉換 | — |
| Bridge | 對象多維度變化 | 分離抽象與實現 | 開閉原則 |
| Composite | 複雜對象介面統一 | 統一複雜對象介面 | 里氏替換原則 |
| Decorator | 對象組合職責 | 在穩定介面上擴展 | 開閉原則 |
| Facade | 子系統高層介面 | 封裝子系統 | 開閉原則 |
| Flyweight | 系統開銷優化 | 封裝對象獲取 | — |
| Proxy | 對象訪問變化 | 封裝對象訪問過程 | 里氏替換原則 |
| Chain of Responsibility | 對象請求處理流程 | 封裝責任範圍 | — |
| Command | 請求變化 | 封裝行為對象 | 開閉原則 |
| Interpreter | 領域問題變化 | 封裝特定領域變化 | — |
| Iterator | 對象內部集合變化 | 封裝集合使用方式 | 單一職責原則 |
| Mediator | 對象交互變化 | 封裝對象間交互 | 開閉原則 |
| Memento | 狀態輔助保存 | 封裝對象狀態變化 | 介面隔離原則 |
| Observer | 通訊對象變化 | 封裝對象通知 | 開閉原則 |
| State | 對象狀態變化 | 封裝狀態相關行為 | 單一職責原則 |
| Strategy | 算法變化 | 封裝算法 | 里氏替換原則 |
| Template Method | 算法子步驟變化 | 封裝算法骨架 | 依賴倒置原則 |
| Visitor | 對象操作變化 | 封裝對象操作變化 | 開閉原則 |