不學設計模式,原始碼你都看不懂!
01
什麼是設計模式
設計模式( Design Pattern )代表了最佳的實踐,通常被有經驗的物件導向的軟體開發人員所採用。設計模式是軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。這些解決方案是眾多軟體開發人員經過相當長一段時間的試驗和錯誤總結出來的。
上面的解釋來自於網路,是比較標準的定義,可以從中篩選出幾個關鍵字來幫助我們理解什麼是設計模式:
最佳實踐
解決方案
試驗和錯誤總結
從上面的三個關鍵詞中可以總結出,設計模式就是在針對編碼過程中遇到的問題總結出來的最佳解決方案。
那麼這些問題指的是什麼問題呢?物件導向的程式應該具有可維護性、程式碼可複用性、擴充套件性及靈活性,要解決的問題就是程式碼可維護性問題、複用性問題、擴充套件性問題及靈活性問題。
簡單來說,設計模式就是指導你如何寫出可維護、可複用、可擴充套件及靈活的程式碼。
02
設計模式分類
設計模式總共有 23 種,總體來說可以分為三大類:建立型模式( Creational Patterns )、結構型模式( Structural Patterns )和行為型模式( Behavioral Patterns )。
上面的三種分類說明,有助於在開發時思考當前場景應該使用哪種分類。大家不一定要全部記住,有個大概的瞭解即可。
03
學習設計模式
1. 為什麼要學設計模式
寫出可維護、可複用、可擴充套件及靈活的程式碼是我們的目的,也是學習設計模式的理由,但是這個理由對我們來說太抽象,下面從 “ 讀 ” 和 “ 寫 ” 兩方面來說明到底為什麼要學習設計模式。
讀
作為開發人員,不可避免地要接觸其他人寫的程式碼,有的是一些知名的庫或框架,例如 Spring 、Shiro 等。但是當我們去閱讀這些框架原始碼的時候會發現無從下手,因為類太多了,關係太複雜,而且很多類的命名看不懂。
比如 xxxBuilder 、xxxStrategy 、xxxFilter 等,一個詞看不懂就可能導致你直接放棄繼續閱讀。如果沒有學過設計模式,自然看不懂,學習設計模式可以有效地幫助你閱讀程式碼,即便不能百分百幫到你,至少也能幫到百分之三四十。
寫
每一個開發人員必然噴過其他人寫的程式碼,覺得其他人的程式碼有的寫得很垃圾,尤其是要擴充套件功能或者修改功能的時候,恨不得全部刪掉重新寫,其實在其他人看來你的程式碼也是如此。
所以寫出一手讓人無話可說的程式碼是很有必要的,不僅可以滿足你的小小成就感,也可以讓你的程式更快速穩定地發展。在一個專案組中,如果大家都學習過設計模式,那麼當你閱讀或修改同事寫的程式碼時也將得心應手,少了很多麻煩。
2. 如何學好設計模式
如今網上和書上都有大量的設計模式教程,但是他們大部分都有一個共同點:僅僅使用生活中的例子。比如前幾年我第一次學習設計模式,在學到介面卡模式時,教程中丟擲了一個電器的插頭問題:
你家插座只有三頭的,但電器插頭是兩頭的,怎麼辦?弄個插頭介面卡將兩頭轉換成三頭。
Nice,這個例子簡單明瞭,作為新手的我瞬間明白了介面卡的含義,就是在不相容的雙方中間做一層轉化。但是後來發現在實際編碼中根本用不上這個設計模式,因為我不會用。
生活中的例子的確可以幫助我們理解設計模式,這是毋庸置疑的,但是想要真正用好設計模式,實際專案中的案例是必不可少的,這也是我寫這門課的原因,希望通過分析實際案例,能夠幫到更多想要學習設計模式的同行。
▼掃碼試讀課程
下面給出幾點更加具體的建議:
從生活例子中去理解設計模式;
從實際案例去了解設計模式的使用場景;
動手實踐,在學完實際案例之後,不妨動手寫一寫,不要寫生活中的例子,自己構造一個小功能,用上你的設計模式;
改變自己的意識,在開發或修改一個功能時,首先要下意識地去思考這個功能將來在修改和擴充套件上會遇到什麼問題,能否用上設計模式。
記住一定要思考、一定要思考、一定要思考,即便最終用不上,也能讓你回顧一遍設計模式的內容,使其知識更牢固。很多開發者不是不會用,而是根本沒有想過要用設計模式,久而久之這方面的能力自然就弱化了。
點選閱讀原文,掌握設計模式
相關文章
- Android原始碼設計模式-模板模式Android原始碼設計模式
- 從原始碼學習設計模式之模板方法原始碼設計模式
- 不會SQL隱碼攻擊,連漫畫都看不懂了SQL
- Android原始碼設計模式-中介者模式Android原始碼設計模式
- 《Android原始碼設計模式》學習筆記之ImageLoaderAndroid原始碼設計模式筆記
- 原始碼中的設計模式--模板方法模式原始碼設計模式
- 原始碼中的設計模式--工廠模式原始碼設計模式
- 設計模式(十四)——模板模式(SpringIOC原始碼分析)設計模式Spring原始碼
- 從shiro原始碼角度學習工廠方法設計模式原始碼設計模式
- 你為什麼看不懂原始碼之Vue 3.0【1】原始碼Vue
- 原始碼中的設計模式--裝飾器模式原始碼設計模式
- 設計模式(十)——組合模式(HashMap原始碼解析)設計模式HashMap原始碼
- 從設計模式角度看OkHttp原始碼設計模式HTTP原始碼
- Gson原始碼解析和它的設計模式原始碼設計模式
- 【設計模式】介面卡模式以及原始碼應用設計模式原始碼
- 設計模式(九)——裝飾者模式(io原始碼分析)設計模式原始碼
- 設計模式(二十三)——策略模式(Arrays原始碼分析)設計模式原始碼
- 學不懂Netty?看不懂原始碼?不存在的,這篇文章手把手帶你閱讀Netty原始碼!Netty原始碼
- 那些你不經意間使用的設計模式(一) - 建立型模式設計模式
- 【分享】從Mybatis原始碼中,學習到的10種設計模式MyBatis原始碼設計模式
- Mybatis 原始碼解讀-設計模式總結MyBatis原始碼設計模式
- 不會DRF?原始碼都分析透了確定不來看?原始碼
- 原始碼中的設計模式--模板方法模式(鉤子方法)原始碼設計模式
- 設計模式(十八)——觀察者模式(JDK Observable原始碼分析)設計模式JDK原始碼
- 設計模式(十五)——命令模式(Spring框架的JdbcTemplate原始碼分析)設計模式Spring框架JDBC原始碼
- Android設計模式——策略模式之原始碼使用場景(三)Android設計模式原始碼
- 人人都會設計模式:介面卡模式--Adapter設計模式APT
- 人人都會設計模式: 07、建造者模式--Builder設計模式UI
- 人人都會設計模式—觀察者模式–Observer設計模式Server
- 設計模式(二十四)——職責鏈模式(SpringMVC原始碼分析)設計模式SpringMVC原始碼
- 設計模式(十七)——迭代器模式(ArrayList 集合應用原始碼分析)設計模式原始碼
- 設計模式(十二)——享元模式(Integer緩衝池原始碼分析)設計模式原始碼
- JavaScript設計模式系列二之建造者模式(附案例原始碼)JavaScript設計模式原始碼
- 人人都會設計模式—模版方法模式–Template-Method設計模式
- 看完這篇原型設計模式,還不會,請你吃瓜原型設計模式
- iOS框架·Masonry原始碼深度解析及學習啟示:設計模式與鏈式程式設計思想iOS框架原始碼設計模式程式設計
- 看不懂原始碼,一條路debug嗎?原始碼
- 我在專案內使用了設計模式後,同事直呼看不懂設計模式