不學設計模式,原始碼你都看不懂!

GitChat 精品課發表於2019-04-08

01

什麼是設計模式


設計模式( Design Pattern )代表了最佳的實踐,通常被有經驗的物件導向的軟體開發人員所採用。設計模式是軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。這些解決方案是眾多軟體開發人員經過相當長一段時間的試驗和錯誤總結出來的。


上面的解釋來自於網路,是比較標準的定義,可以從中篩選出幾個關鍵字來幫助我們理解什麼是設計模式:

  • 最佳實踐

  • 解決方案

  • 試驗和錯誤總結


從上面的三個關鍵詞中可以總結出,設計模式就是在針對編碼過程中遇到的問題總結出來的最佳解決方案。


那麼這些問題指的是什麼問題呢?物件導向的程式應該具有可維護性、程式碼可複用性、擴充套件性及靈活性,要解決的問題就是程式碼可維護性問題、複用性問題、擴充套件性問題及靈活性問題。


簡單來說,設計模式就是指導你如何寫出可維護、可複用、可擴充套件及靈活的程式碼。


02

設計模式分類


設計模式總共有 23 種,總體來說可以分為三大類:建立型模式( Creational Patterns )、結構型模式( Structural Patterns )和行為型模式( Behavioral Patterns )。

640?wx_fmt=png

上面的三種分類說明,有助於在開發時思考當前場景應該使用哪種分類。大家不一定要全部記住,有個大概的瞭解即可。


03

學習設計模式


1. 為什麼要學設計模式

寫出可維護、可複用、可擴充套件及靈活的程式碼是我們的目的,也是學習設計模式的理由,但是這個理由對我們來說太抽象,下面從 “ 讀 ” 和 “ 寫 ” 兩方面來說明到底為什麼要學習設計模式。


作為開發人員,不可避免地要接觸其他人寫的程式碼,有的是一些知名的庫或框架,例如 Spring 、Shiro 等。但是當我們去閱讀這些框架原始碼的時候會發現無從下手,因為類太多了,關係太複雜,而且很多類的命名看不懂。


比如 xxxBuilder 、xxxStrategy 、xxxFilter 等,一個詞看不懂就可能導致你直接放棄繼續閱讀。如果沒有學過設計模式,自然看不懂,學習設計模式可以有效地幫助你閱讀程式碼,即便不能百分百幫到你,至少也能幫到百分之三四十。


每一個開發人員必然噴過其他人寫的程式碼,覺得其他人的程式碼有的寫得很垃圾,尤其是要擴充套件功能或者修改功能的時候,恨不得全部刪掉重新寫,其實在其他人看來你的程式碼也是如此。


所以寫出一手讓人無話可說的程式碼是很有必要的,不僅可以滿足你的小小成就感,也可以讓你的程式更快速穩定地發展。在一個專案組中,如果大家都學習過設計模式,那麼當你閱讀或修改同事寫的程式碼時也將得心應手,少了很多麻煩。


2. 如何學好設計模式

如今網上和書上都有大量的設計模式教程,但是他們大部分都有一個共同點:僅僅使用生活中的例子。比如前幾年我第一次學習設計模式,在學到介面卡模式時,教程中丟擲了一個電器的插頭問題:


你家插座只有三頭的,但電器插頭是兩頭的,怎麼辦?弄個插頭介面卡將兩頭轉換成三頭。


Nice,這個例子簡單明瞭,作為新手的我瞬間明白了介面卡的含義,就是在不相容的雙方中間做一層轉化。但是後來發現在實際編碼中根本用不上這個設計模式,因為我不會用。


生活中的例子的確可以幫助我們理解設計模式,這是毋庸置疑的,但是想要真正用好設計模式,實際專案中的案例是必不可少的,這也是我寫這門課的原因,希望通過分析實際案例,能夠幫到更多想要學習設計模式的同行。


掃碼試讀課程

640?wx_fmt=jpeg


下面給出幾點更加具體的建議:


  • 從生活例子中去理解設計模式;

  • 從實際案例去了解設計模式的使用場景;

  • 動手實踐,在學完實際案例之後,不妨動手寫一寫,不要寫生活中的例子,自己構造一個小功能,用上你的設計模式;

  • 改變自己的意識,在開發或修改一個功能時,首先要下意識地去思考這個功能將來在修改和擴充套件上會遇到什麼問題,能否用上設計模式。

記住一定要思考、一定要思考、一定要思考,即便最終用不上,也能讓你回顧一遍設計模式的內容,使其知識更牢固。很多開發者不是不會用,而是根本沒有想過要用設計模式,久而久之這方面的能力自然就弱化了。


點選閱讀原文,掌握設計模式

相關文章