IT技術(shù)日新月異,平臺更新、語言更迭,想要不被淘汰就要不斷學(xué)習(xí),可謂是退休未至,學(xué)習(xí)不止。然而很多技術(shù),比如不同的語言只是招數(shù),深厚的內(nèi)功才是無往不勝的根基。一如《倚天屠龍記》中凡人學(xué)習(xí)乾坤大挪移要數(shù)年數(shù)十年才能學(xué)會,但若有九陽神功,則須臾即會。設(shè)計模式便是屬于九陽神功一類,它不局限于平臺、不受限于語言,讓我們的代碼更優(yōu)雅、功能更易維護。
在學(xué)習(xí)設(shè)計模式的時候偶然發(fā)現(xiàn)了劉偉老師的文章史上最全設(shè)計模式導(dǎo)學(xué)目錄(完整版),初讀便有種相見恨晚的感覺,可以說是本人看過的最好的設(shè)計模式學(xué)習(xí)資料,每個模式都附有實際案例,簡明易懂。雖然示例代碼都是Java所寫,但是邏輯思想并不局限于語言。學(xué)習(xí)中,本人將所有案例代碼都用OC重寫了一遍zDesignPattern-OC,一則鞏固知識,二來也可以供使用OC的小伙伴做個參考。
劉偉老師給了幾個學(xué)習(xí)設(shè)計模式時的建議,我覺得非常好:
在學(xué)習(xí)每一個設(shè)計模式時至少應(yīng)該掌握如下幾點:
1.這個設(shè)計模式的意圖是什么
2.它要解決一個什么問題
3.什么時候可以使用它
4.它是如何解決的,掌握它的結(jié)構(gòu)圖,記住關(guān)鍵代碼
- 對應(yīng)每個設(shè)計模式能夠想到至少兩個它的應(yīng)用實例,一個生活中的,一個軟件中的 。
- 這個模式的優(yōu)缺點是什么,在使用時要注意什么。
設(shè)計模式中有幾個設(shè)計原則非常重要,文章中介紹設(shè)計模式的時候會經(jīng)常提到,記下備忘:
面向?qū)ο笤O(shè)計原則
- 單一職責(zé)原則(SRP):一個類只負(fù)責(zé)一個功能領(lǐng)域中的相應(yīng)職責(zé)
- 開閉原則(OCP):軟件實體應(yīng)對擴展開放,而對修改關(guān)閉
- 里氏代換原則(LSP):所有引用基類對象的地方能夠透明的使用其子類的對象
- 依賴倒轉(zhuǎn)原則(DIP):抽象不應(yīng)該依賴于細(xì)節(jié),細(xì)節(jié)應(yīng)該依賴于抽象
注解:寫代碼用到具體類時,不與具體類交互,而與具體類的上層接口交互。 - 接口抽離原則(ISP):使用多個專門的接口,而不使用單一的總接口
注解:每個接口中不存在子類用不到卻必須實現(xiàn)的方法,否則就要將接口拆分。使用多個隔離的接口 - 合成復(fù)用原則(CRP):盡量使用對象組合,而不是繼承來達到復(fù)用的目的
- 迪米特法則(LoD):一個軟件實體應(yīng)當(dāng)盡可能少地與其他實體發(fā)生相互作用
注解:一個類對自己依賴的類知道的越少越好。也就是說無論被依賴的類多么復(fù)雜,都應(yīng)該將邏輯封裝在方法的內(nèi)部,通過public方法提供給外部。這樣當(dāng)被依賴的類變化時,才能最小的影響該類。
GoF設(shè)計模式共有23種,簡單工廠模式是不算在內(nèi)的,但是因為它比較簡單,經(jīng)常會被用來作為講解設(shè)計模式的一個引子。
有人將劉偉老師關(guān)于設(shè)計模式的相關(guān)文章整理成了電子書,這個電子書有些小瑕疵,但影響并不是很大,大家也可以買買劉偉老師的書,作為備忘參考還是很好的。
另外附上一個整合了很多設(shè)計模式學(xué)習(xí)資料的地址Trip-to-iOS-Design-Patterns,劉偉老師的文章也是在這里發(fā)現(xiàn)的。
2017.6.24更新設(shè)計原則注解,參考文章:23種設(shè)計模式全解析
抽象工廠模式和建造者模式的區(qū)別:
- 建造者模式所有函數(shù)加一起才能實現(xiàn)一個對象
- 而抽象工廠一個函數(shù)就可以創(chuàng)建一個對象
建造者模式是創(chuàng)造復(fù)雜對象時候的一種分解方式
策略模式和模板方法模式區(qū)別:
策略模式和模板方法模式的應(yīng)用場景都是類似于不同的類提供不同的算法,但有一點區(qū)別是,策略模式中每個“不同的算法”都是一個完整的算法;模板方法中不同的類提供的都是一個完整算法的一部分,和公共父類中的固定算法合并成一個完整算法。