優秀的設計範例
從優秀設計方案中發現和總結出來的經驗
在實踐中反覆出現的設計問題的優秀解決方案
設計和開發人員相互交流的基本術語
物件導向設計的架構
可供簡單組合的積木式的設計元件
新發明的創新思路和方法
解決物件導向設計問題的完整方案
一門物件導向的程式設計語言
一些物件導向的基本概念
一些基礎的UML類圖知識
模式命名的目的是交流
記不住名稱並不影響對模式的學習,只是你在給別人講你的設計思路時要多囉嗦幾句而已
- 模式又按目的分類,又按範圍分類,我搞不清楚,而且我認為有的模式在哪個類別中都有一定道理,到底要怎樣看待模式的分類呢?
分類不重要
已有的分類只是便於瞭解模式間的關係
類圖只是解決方案的表現形式
模式的目的是解決某一特定的問題
模式是根據其意圖命名,而不是解決方案的類圖
模式的共性就是設計原則,模式是在設計原則的指導下將長期實踐的經驗整理下來形成的。
設計原則是設計模式之魂
這些原則主要包括:單一職責原則SRP、開發關閉原則OCP、依賴倒置原則DIP、介面隔離原則ISP、裡氏替換原則LSP、合成利用原則CARP
- 我看到在實際代碼中的實現往往與書中的類圖不太相同,這是正確的使用模式嗎?
實際的實現當中往往考慮了具體的邏輯環境而進行了微調,這個是合適的,也是提倡的
模式是為瞭解決問題,而不是讓我們按它的類圖來實現代碼
- 我看到別人的代碼既像這個模式又像那個模式,有時甚至是混在一起,這是怎麼回事呢?
實際設計中,設計人員往往會進行設計折衷,模式的使用也往往會組合起來,或者進行一些簡化。
要的不是模式本身,而是用模式解決實際問題。
- 我負責的代碼有限,沒有機會做全域性的設計工作,我要怎樣學習和使用設計模式呢?
勤于思考,加強理解
在小範圍代碼中有意識的選擇模式使用
向有經驗的同學請教用法是否合適
循序漸進
- 總體上說,感覺學習設計模式是一個長期的過程,我怎麼知道自己學到什麼程度了呢?
可以將學習過程分為三個階段
階段一學習一個模式並套用
階段二發現模式的不適用性並調整
階段三著眼於實際問題的解決,順其自然的使用模式
可以肯定的回答“有”
會引入更多的抽象層次
會引入更多功能簡單的小類
會讓人走火入魔
……
考慮設計模式是如何解決問題的
瀏覽模式的意圖部分
研究目的相似的模式
考慮你的設計哪些是可變的
明確模式的負面效應
弄清模式的意圖並特別注意其適用性部分和效果部分,確定它適合你的問題
弄清結構、參與者和協作部分
看程式碼範例
選擇在應用上下文中有意義的模式參與者的名字。模式中的名字通常過於抽象而不會直接出現在應用中。
定義類及介面,建立它們的關係,定義代表資料和對象引用的執行個體變數。
實現執行模式中責任和協作的操作,程式碼範例部分的例子可以提供協助和指導。
註:這些只對一開始使用模式起指導作用。以後會形成自己的使用方法。
保持簡單(如果沒用模式解決某個問題,就不是經驗豐富的開發人員?)
模式不能解決所有問題
要知道何時需要模式(不僅是使用的時機,還有放棄的時機)
重構是最好的使用模式的時機(重構就是為了改善結構,而不是改變行為)
敢於放棄模式(放棄往往比拿起更難)
如果現在不需要,就不要使用(抗拒誘惑,降低複雜度)
設計模式不等同於軟體架構,但設計模式可以在架構進入更詳細的設計階段時發揮作用
——歡迎轉載,請註明出處 http://blog.csdn.net/caowenbin ——