第一篇設計模式2019年10月開始,到現在差不多半年的時間了,最后我終於堅持寫完了。
不管寫的質量是好是壞【堅持】這件事確實是很困難的。最初的想法是通過寫博客來督促自己,讓自己把這個學習的過程記錄下來,之前都只逛園子,很多東西記錄到雲筆記。但是雲筆記和博客相比缺少一樣東西,那就是分享,當別人發現有不對的地方可以指正,帶來的點贊啊評論啊會進行正向激勵,這樣下次學習寫東西的時候更有動力(不要說是最大的動力,最大的動力應該是源於自身的充實)。通過這樣的正向反饋對自己的學習熱情和學習態度都有很大的幫助,當沒人反饋的時候也要堅持,因為我們要明白最大的收獲是我們自己。
不過寫博客確實費時間,一篇文章得花個2-5小時不等(對於我而言)。首先自己得先領會看懂才能寫出來讓別人看懂,其次自己得畫圖、寫代碼、測試等等,最后通篇寫完得注意前后敘述邏輯排版順序以及專業用詞的准確性。當然這個是循序漸進的,我也是初次嘗試,很多東西有待提高,學習知識嘛不寒磣。並且通過寫的方式,首先學習一遍,寫的過程再分析一遍,最后自己閱讀調整,這樣下來不僅加強了知識的記憶並且對細節的理解也更深刻。至於哪里深刻,這個東西只能自己體會了,很玄學。就像我在學習設計模式的過程中對於之前有些不太理解的設計仿若醍醐灌頂,因為之前接觸過的系統可能到最后都沒擴展過,所以有些模式並沒有發揮它的價值,但是至少我知道了這個地方原來這樣設計是為了擴展為了有一個更好的設計。
之前的文章開始寫沒有經驗,應該給一個目錄方便閱讀或者把demo代碼地址放出來。后面寫了幾篇才發現,最后想難得改,也不破壞最初的樣子就一直寫完了。所以在這里對模式進行一個總結吧分類,同時也相當於一個目錄,方便查找對應文章。
設計模式書:
設計模式基礎
- 抽象
- 封裝
- 多態
- 繼承
設計模式原則
設計原則名稱 |
設計原則簡介 |
遵循原則的設計模式 |
單一職責原則 (Single Responsibility Principle, SRP) |
類的職責要單一,不能將太多的職責放在一個類中 |
Head First設計模式——適配器模式 Head First設計模式——組合模式 |
開閉原則 (Open-Closed Principle, OCP) |
軟件實體對擴展是開放的,但對修改是關閉的,即在不修改一個軟件實體的基礎上去擴展其功能 |
Head First設計模式——觀察者模式 |
里氏代換原則 (Liskov Substitution Principle, LSP) |
在軟件系統中,一個可以接受基類對象的地方必然可以接受一個子類對象 |
基本原則 |
依賴倒轉原則 (Dependency Inversion Principle, DIP) |
要針對抽象層編程,而不要針對具體類編程 |
Head First設計模式——策略模式 Head First設計模式——裝飾者模式 |
接口隔離原則 (Interface Segregation Principle, ISP) |
使用多個專門的接口來取代一個統一的接口 |
基本原則 |
合成復用原則 (Composite Reuse Principle, CRP) |
在系統中應該盡量多使用組合和聚合關聯關系,盡量少使用甚 至不使用繼承關系 |
Head First設計模式——策略模式 |
迪米特法則 (Law of Demeter, LoD) |
一個軟件實體對其他實體的引用越少越好,或者說如果兩個類不必彼此直接通信, 那么這兩個類就不應當發生直接的相互作用,而是通過引入一個第三者發生間接交互 |
Head First設計模式——外觀模式 |
設計模式分類(分類的目的是幫助我們記憶,通過比較不同分類讓我們對模式有清晰的概念)
- 創建型(創建模式涉及到將對象實例化,這類模式提供一個方法,將客戶從所需要實例化的對象解耦)
單例模式(Singleton)
生成器模式(Builder)
原型模式(Prototype)
抽象工廠模式(Abstract Factory)
工廠方法模式(Factory Method)
- 行為型(只要是行為模式,都涉及到類和對象如何交互分配職責)
策略模式(Strategy)
狀態模式(State)
責任鏈模式(Chain of Responsibility)
解釋器模式(Interpreter)
命令模式(Command)
觀察者模式(Observer)
備忘錄模式(Memento)
迭代器模式(Iterator)
模板方法模式(Template Method)
訪問者模式(Visitor)
中介者模式(Mediator)
- 結構型(結構型模式可以讓你把類對象組合到更大的結構中)
裝飾者模式(Decorator)
代理模式(Proxy)
組合模式(Composite)
橋連接模式(Bridge)
適配器模式(Adapter)
蠅量模式(Flyweight)
外觀模式(Facade)
定義設計模式
設計模式:在某情景下,針對某問題的某種解決方案
情景:應用某個模式的情況,應該是不斷出現的情況。
問題:某情景下達到的目的,也可以是某情景的約束。
解決方案:一個通用的設計,用來解決約束,達到目的。
模式示例代碼
https://github.com/XSpringSun/DesignPatternDemo