23種設計模式(C++)


每一種都有對應理解的相關代碼示例 → Git原碼

一. GOF-23 模式分類

從目的來看

• 創建型(Creational)模式:將對象的部分創建工作延遲到子類或者其他對象,從而應對需求變化為對象創建時具體類型實現引來的沖擊。

• 結構型(Structural)模式:通過類繼承或者對象組合獲得更靈活的結構,從而應對需求變化為對象的結構帶來的沖擊。

• 行為型(Behavioral)模式:通過類繼承或者對象組合來划分類與對象間的職責,從而應對需求變化為多個交互的對象帶來的沖擊。

從范圍來看

• 類模式處理類與子類的靜態關系。

• 對象模式處理對象間的動態關系。

二. 重構獲得模式(Refactoring to Patterns)

  • 面向對象設計模式是“好的面向對象設計”,所謂“好的面向對象設計”指是那些可以滿足 “應對變化,提高復用”的設計 。

  • 現代軟件設計的特征是“需求的頻繁變化”。設計模式的要點是“尋找變化點,然后在變化點處應用設計模式,從而來更好地應對需求的變化”.“什么時候、什么地點應用設計模式”比“理解設計模式結構本身”更為重要。

  • 設計模式的應用不宜先入為主,一上來就使用設計模式是對設計模式的最大誤用。沒有一步到位的設計模式。敏捷軟件開發實踐提倡的“Refactoring to Patterns”是目前普遍公認的最好的使用設計模式的方法。

三. 重構關鍵技法

  • 靜態 → 動態

  • 早綁定 → 晚綁定

  • 繼承 → 組合

  • 編譯時依賴 → 運行時依賴

  • 緊耦合 → 松耦合

四. 從封裝變化角度對模式分類

組件協作:

🔗 組件協作(TemplateMethod - Observer/Event - Strategy)

Template Method

Observer / Event

Strategy

單一職責:

🔗 單一職責(Decorator - Bridge)

Decorator

Bridge

對象創建:

🔗 對象創建(FactoryMethod - AbstractFactory - Prototype - Builder)

Factory Method

Abstract Factory

Prototype

Builder

對象性能:

🔗 對象性能(Singleton - Flyweight享元)

Singleton

Flyweight

接口隔離:

🔗 接口隔離(Facade - Proxy - Mediator - Adapter)

Façade

Proxy

Mediator

Adapter

狀態變化:

🔗 狀態變化(Memento備忘錄 - State)

Memento

State

數據結構:

🔗 數據結構(Composite - iterator - Chain of Responsibility)

Composite

Iterator

Chain of Responsibility

行為變化:

🔗 行為變化(Command - Visitor)

Command

Visitor

領域問題:

🔗 領域問題(Interpreter)

Interpreter


什么時候不用模式

  1. 代碼可讀性很差時
  2. 需求理解還很淺時
  3. 變化沒有顯現時
  4. 不是系統的關鍵依賴點
  5. 項目沒有復用價值時
  6. 項目將要發布時

經驗之談

  1. 不要為模式而模式
  2. 關注抽象類 & 接口
  3. 理清變化點和穩定點
  4. 審視依賴關系
  5. 要求Framework 和 Application 的區隔思維
  6. 良好的設計是演化的結果

設計模式成長之路

  1. “手中無劍,心中無劍” : 見模式而不知
  2. “手中有劍,心中無劍” :可以識別模式,作為應用開發人員模式
  3. “手中有劍,心中有劍” : 作為框架開發人員為應用設計某些模式
  4. “手中無劍,心中有劍” : 忘掉模式,只有原則


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM