浪了個五一,就發現CSDN在側邊自帶博客目錄了,再也不用在正文裏面t o c顯示目錄好長好長了XD !
所以下一步我許願,CSDN出一個markdown的head folder,編輯文章再也不用不停翻頁了。
ref
- GoF的肯定是必讀的,不說了。什麼大話設計模式啊,Head Fisrt Design Pattern之類的,隨手翻了翻…emm感覺還是直接看GOF吧,雖然不一定能把所有精髓都掌握 (太難了) ,但是讀懂入門也是沒問題的啊
- newplan推薦的 (以及newplan本人的倉庫XD
- 李建忠設計模式
前兩個都是基於JAVA的,這個是基於C++的(現在市面上用C++寫的真的很少…
代碼和slide網上也有,爲了不侵權就不share了,有心人自己找下 - 侯捷的設計模式講座的slide(從stl源碼出發…留着以後再看,新入坑不建議)
提綱挈領
基礎知識
- 類、接口、類圖
-
關係
前兩個都有has-a的邏輯,只不過第一個是has-part,第二個是has-whole;
後兩個都有is-a的邏輯- 依賴關係(弱耦合
用你的方法/功能而不是用你,“人”打電話,用到“手機”的撥號功能
下面那個引出去的虛線是類的實現的意思,跟依賴的那個虛線+箭頭沒有關聯。
- 關聯關係(學會辨析 ,尤其二三
-
普通關聯
單向、雙向均有。相互要用到對面的整個對象(而不僅僅某個功能了)。例如,老師和學生的關係圖,每個老師可以教多個學生,每個學生也可向多個老師學,他們是雙向關聯。忽略那個teaches to 會更方便記憶
-
聚合關係(強耦合
整體與部分(has-a),成員對象是整體對象的一部分,但是成員對象可以脫離整體對象而獨立存在。例如,學校與老師的關係,學校包含老師,但如果學校停辦了,老師依然存在。- 組合關係(更強耦合
也表示類之間的整體與部分的關係,但它是一種更強烈的聚合關係,是 cxmtains-a 關係。整體對象可以控制部分對象的生命週期,一旦整體對象不存在,部分對象也將不存在,部分對象不能脫離整體對象而存在。例如,頭和嘴的關係,沒有了頭,嘴也就不存在了。
- 組合關係(更強耦合
-
泛化關係
耦合度最大,is-a 的關係 -
實現關係
-
- 依賴關係(弱耦合
設計原則
-
DIP 太重要了
-
OCP
-
SRP
-
LSP
-
ISP
-
組合優於繼承
-
封裝變化點
- 其實這個跟DIP原則是一致的,如果違反了這兩條其中一個,另一個也滿足不了(這幾個原則實際上是從不同角度看代設計模式這個事情)
-
面向接口設計
- “一個產業強盛與否的標誌就是是否接口標準化”
重構關建技法
- 非常關鍵
- 學到後面會發現是其實是從多個角度看待代碼這件事。(設計原則也是,多個角度罷了
模式列表
- 總表
根據目的劃分
創建型模式
用於描述“怎樣創建對象”,它的主要特點是“將對象的創建與使用分離”。GoF 中提供了單例、原型、工廠方法、抽象工廠、建造者等 5 種創建型模式。
- 單例
- 原型
- 工廠方法
- 抽象工廠
- 建造者
結構型模式
用於描述如何將類或對象按某種佈局組成更大的結構
- 代理
- 適配器
- 橋接
- 裝飾
- 外觀
- 享元
- 組合
行爲型模式
- 模板方法
- 策略
- 命令
- 職責鏈、
- 狀態
- 觀察者
- 中介者
- 迭代器
- 訪問者
- 備忘錄
- 解釋器
根據作用範圍劃分
根據模式是主要用於類上還是主要用於對象上來分,這種方式可分爲類模式和對象模式兩種
類模式
用於處理類與子類之間的關係,這些關係通過繼承來建立,是靜態的,在編譯時刻便確定下來了。GoF中的工廠方法、(類)適配器、模板方法、解釋器屬於該模式。
對象模式
用於處理對象之間的關係,這些關係可以通過組合或聚合來實現,在運行時刻是可以變化的,更具動態性。GoF 中除了以上 4 種,其他的都是對象模式。
從封裝變化角度劃分(李建忠老師)
系列博客目錄
按照李建忠老師的分類進行學習的。說實話,李老師的課真的驚豔我,裂 牆 安 利 !
雖然之前邊耐政老師(老師必須擁有姓名XD)講得也很不錯(按照GoF的進行教學),讓我簡單入了個門並且讓我意識到了設計模式的重要性,但是由於閱歷以及課程組織的原因,仍是十分懵懂。
組件協作
- 模板、觀察者、策略
單一職責
- 裝飾、橋