一、什么是設計模式
“每一個模式描述了一個在我們周圍不斷重復發生的問題,以及該問題的解決方案的核心。這樣,你就能一次又一次地使用該方案而不必做重復勞動”
——Christopher Alexander
盡管Alexander所指的是城市和建筑模式,但他的思想也同樣適用于面向對象設計模式。
受Alexander的啟發,Erich Gamma、Richard Helm、Ralph Johnson、Jshn Vlissides四人(人稱Gang Of Four,GOF)總結了23種常見的軟件開發設計模式
這23種設計模式并不描述新的或未經證實的設計,而是經過驗證,用于解決在特定環境下、特定問題的解決方案。
1.1 設計模式四要素
- 模式名稱:助記名,便于記憶和交流
- 問題:交代特定的問題場景
- 解決方案:確定了所包含的類和實例,它們的角色、協作方式以及職責分配
- 效果:使用此解決方案之后所帶來的最終效果
1.2 為什么需要學習設計模式
- 1.設計模式已成為軟件開發行業的“標準詞匯”
- 2.個人技術提高的必備知識
- 3.無須重復造輪子
二、設計模式的分類
GOF將設計模式分為23種設計模式,其中分為三大類
2.1 創建型模式
抽象了對象實例化的過程,用來幫助創建對象的實例
2.2 結構型模式
描述如何組合類和對象以獲取更大的結構
2.3 行為型模式
描述算法和對象間的職責分配
2.4 設計模式總覽
上面標紅色五角星的為必須理解透徹的設計模式
三、UML類圖
為了更好的學習和理解設計模式,學習設計模式之前,需要掌握UML類圖
3.1 UML類圖
UML,全稱:統一建模語言(Unified Modeling Language)它是讓系統可視化的表現手段。
UML類圖主要用來表示類、接口、實例之間相互的靜態關系。本系列使用Java語言作為代碼演示,約定Java的字段屬性與UML的屬性(Attribute)對等,Java的方法與UML的操作(Operation)對等。
3.2 UML類圖幾種關系
1.依賴關系(dependency)
它描述一個對象在運行期會使用到另一個對象的關系。依賴是一種臨時性的關系,通常都是在運行期間產生,并隨著運行場景的不同,依賴關系也可能發生變化
比如人和船這兩個對象,如果場景是:開動輪船,那么船依賴于人。如果場景是:渡海,那么人依賴于船
2.泛化(generalization)
說明兩個對象之間的繼承關系。被繼承的類稱為父類,繼承的類稱為子類
3.實現(realization)
描述在一個類中描述,具體實現由另一個類在實現細節
4.關聯(association)
描述了一個事物對象與另一個事物對象相關聯。其中關聯又具體分為:聚合關系、組合關系。
聚合關系:表達整體由部分構成。例如:一個班級由多個學生構成。
組合關系:表達整體擁有部,是一種強依賴的聚合關系。例如:人體是由頭部和眼睛組成.