設計模式匯總


  筆者所發表的設計模式系列的隨筆一共包含15篇,歸納總結了《Head First 設計模式》一書中的內容。在這些隨筆中,盡量用簡潔、概括的語言說明每個模式的概念、特點、用法,並配以圖片(類圖、流程圖)給讀者一種直觀、具體的印象。希望大家能有所收獲。
 
模式匯總
  1. 裝飾着: 包裝一個對象,已提供新的行為
  2. 狀態: 封裝了基於狀態的行為,以使 狀態擁有者將行為委托到當前的狀態
  3. 迭代器: 在對象的集合之間游走,而不暴露集合的實現
  4. 外觀: 簡化一群類的接口
  5. 策略: 封裝可以互換的行為,並使用委托來決定要使用哪一個。
  6. 代理: 包裝對象,以控制對此對象的訪問。
  7. 工廠方法: 封裝實例化的行為,工廠子類決定實例化哪個具體的類、采用什么策略實例化類
  8. 適配器: 封裝對象並提供不同的接口
  9. 觀察者: 讓對象能夠在狀態改變時被通知
  10. 模板方法:父類定義算法的模板, 由子類決定如何實現算法中的某些步驟
  11. 組合: 客戶用一致的方法處理對象的集合和單個對象
  12. 單件: 確保有且只有一個對象被創建
  13. 抽象工廠: 允許客戶創建對象的家族,而無需指定它們的具體類
  14. 命令: 封裝請求,成為對象
 
相似模式的比較
  • 裝飾者: 包裝另一個對象,並提供額外的行為
  • 外觀: 包裝許多對象,以簡化它們的接口
  • 代理:包裝另一個對象,並控制對它的訪問
  • 適配器:包裝另一個對象,並提供不同的接口
 
設計原則匯總
  1. “封裝變化”。找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的代碼放在一起。
  2. 針對接口編程,而不是針對實現編程。
  3. 對用組合,少用繼承。
  4. 為交互對象之間的松耦合設計而努力。
  5. 對擴展開放,對修改關閉。
  6. 要依賴抽象,不要依賴具體類
  7. 最少知識原則:只和你的密友談話
  8. 好萊塢原則:(高層組件對待底層組件的方式)別調用(打電話給)我們,我們會調用(打電話給)你。
  9. 單一責任,一個類應該只有一個引起變化的原因
 
模式的概念:
(看了這么多設計模式,我們再來回顧一下“模式”的概念,以及我們應該怎樣來應用這些模式)
模式:是在某情景(context)下,針對某問題的某種解決方案。
  • 問題:包括目標和約束。
  • 解決方案:一個通用的設計,用來解決約束,達到目標。
 
1、對於每個問題,我們應該思考的內容:
2、結構決定功能。類的結構決定類的功能,汽車的結構決定了汽車的功能……
3、設計應“保持簡單”。Keep It Simple。“將你的思想集中在設計本身,而不是在模式上。只有在真正需要時才使用模式”。
 
設計模式分類(1):
“不管是在什么時候,只要我們有一大堆東西,很自然的就會想要為它們分類,這可以幫助我們再更抽象的層次上思考這些問題”
1、創建型模式:涉及到將對象實例化。這類模式都提供一個方法,將客戶從所需要實例化的對象中解耦。
      例如:Singleton、Factory Method、Abstract Factory、Builder、Prototype
2、行為型模式:都涉及到類和對象如何交互及分配職責。
     例如:Template Method、Iterator、Command、Observer、State、Strategy、Mediator、Visitor、Memento、Interpreter、Chain of Responsibility
3、結構型模式:描述類和對象如何被組合以建立新的結構或新的功能。
      例如:Decorator、Composite、Proxy、Facade、Adapter、Flyweight、Bridge
 
設計模式分類(2):
1、類模式:描述類之間的關系如何通過繼承定義。類模式的關系是在編譯時建立的。
     Template Method、Factory Method、Adapter、Interpreter
2、對象模式:描述對象之間的關系,而且主要是利用組合定義。對象模式的關系通常在運行時建立,而且更加動態,更具有彈性。
     Composite、Decorator、Proxy、Strategy、Iterator、Command、Facade、Observer、State、Abstract Factory、Singleton、Visitor、Memento、Chain of Responsibility、Bridge、Flyweight、Prototype、Builder、Mediator
 
 
 


免責聲明!

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



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