首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> C# >> 關於C#

C# 設計模式無廢話系列(二十二):GOF 23 種模式總結與心得

     編輯:關於C#

前言

本文為「無廢話 C# 設計模式」系列的總結篇,針對 GOF 23 種經典設計模式進行比較、原則對應與學習心得整理。文中觀點基於個人實務經驗與 C# 語言特性,僅供參考。

23 種模式快速比較表

設計模式 常用程度 適用層次 引入時機 結構複雜度
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對象操作變化封裝對象操作變化開閉原則

學習設計模式的關鍵心得

  • 掌握模式的意圖與解決的問題,而非死記結構圖。
  • 理解模式封裝的變化點與優缺點,才能在正確場合套用。
  • 熟悉結構圖與各角色職責,但專案是否套用模式不重要,重要的是是否正確套用。
  • 專案中的實作結構與 GOF 定義是否一致不重要,關鍵在於是否從結構中獲得靈感與指導。
  • 無論是否使用設計模式,違背設計原則即為不當設計。
  • 沒有萬能模式;過度追求套用反而導致結構複雜、可讀性下降、專案延期。

系列結語與後續方向

  • GOF 23 種模式介紹到此告一段落,這才是起點。
  • 本系列未結束,後續將探討非 GOF 23 種的相關模式與實務主題。
  • 善用 C# 2.0+ 特性(委派、泛型、分部類等)往往能大幅改進傳統模式實作;實務上優先考慮語言特性,再考慮設計模式。
  • Iterator、Interpreter、Memento 三模式未另立專文,但原始碼包含範例:
    Iterator 在 C# 2.0 極簡單;Interpreter 應用面窄且筆者未深究;Memento 相對單純。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved