筆者所發表的設計模式系列的隨筆一共包含15篇,歸納總結了《Head First 設計模式》一書中的內容。在這些隨筆中,盡量用簡潔、概括的語言說明每個模式的概念、特點、用法,並配以圖片(類圖、流程圖)給讀者一種直觀、具體的印象。希望大家能有所收獲。
1、策略模式 The Strategy pattern
2、觀察者模式 The Observer Pattern
3、裝飾者模式 The Decorator Pattern
4、工廠方法模式 The Factory Method Pattern
5、抽象工廠模式 The Abstract Factory Pattern
6、單例模式 The Singleton Pattern
7、命令模式 The Command Pattern
8、適配器模式 The Adapter Pattern
9、外觀模式 The Facade Pattern
10、模板方法模式 The Template Method Pattern
11、迭代器模式 The Iterator Pattern
12、組合模式 The Composite Pattern
13、狀態模式 The State Pattern
14、代理模式 The Proxy Pattern
15、復合模式 The Compound Pattern
模式匯總
- 裝飾着: 包裝一個對象,已提供新的行為
- 狀態: 封裝了基於狀態的行為,以使 狀態擁有者將行為委托到當前的狀態
- 迭代器: 在對象的集合之間游走,而不暴露集合的實現
- 外觀: 簡化一群類的接口
- 策略: 封裝可以互換的行為,並使用委托來決定要使用哪一個。
- 代理: 包裝對象,以控制對此對象的訪問。
- 工廠方法: 封裝實例化的行為,工廠子類決定實例化哪個具體的類、采用什么策略實例化類
- 適配器: 封裝對象並提供不同的接口
- 觀察者: 讓對象能夠在狀態改變時被通知
- 模板方法:父類定義算法的模板, 由子類決定如何實現算法中的某些步驟
- 組合: 客戶用一致的方法處理對象的集合和單個對象
- 單件: 確保有且只有一個對象被創建
- 抽象工廠: 允許客戶創建對象的家族,而無需指定它們的具體類
- 命令: 封裝請求,成為對象
相似模式的比較
- 裝飾者: 包裝另一個對象,並提供額外的行為
- 外觀: 包裝許多對象,以簡化它們的接口
- 代理:包裝另一個對象,並控制對它的訪問
- 適配器:包裝另一個對象,並提供不同的接口
設計原則匯總:
- “封裝變化”。找出應用中可能需要變化之處,把它們獨立出來,不要和那些不需要變化的代碼放在一起。
- 針對接口編程,而不是針對實現編程。
- 對用組合,少用繼承。
- 為交互對象之間的松耦合設計而努力。
- 對擴展開放,對修改關閉。
- 要依賴抽象,不要依賴具體類
- 最少知識原則:只和你的密友談話
- 好萊塢原則:(高層組件對待底層組件的方式)別調用(打電話給)我們,我們會調用(打電話給)你。
- 單一責任,一個類應該只有一個引起變化的原因
模式的概念:
(看了這么多設計模式,我們再來回顧一下“模式”的概念,以及我們應該怎樣來應用這些模式)
模式:是在某情景(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
