在課程中,咱們陸續學習了所有的24種設計模式,在實驗中也用到了工廠模式、抽象工廠模式、策略模式等內容;在課程的考試中,咱們也將使用制定的設計模式對代碼進行優化,爲了更好的理解設計模式,轉發本篇斯認爲質量較好的博文,但願能對設計模式有更明晰的認識。html
轉自: 設計模式大雜燴(24種設計模式的總結以及學習設計模式的幾點建議) 做者:zuoxiaolong8810(左瀟龍),轉載請註明出處。android
迄今爲止,LZ已經將24種設計模式介紹完了,其中包括GOF23種設計模式以及簡單工廠模式,這些設計模式之間並非徹底獨立的,而是互相之間,會有一些相同的影子,下面咱們來一塊兒總結下這24種設計模式。算法
以上即是設計模式的分類以及各個模式的傳送門,能夠看到其中行爲型模式的個數爲最多,結構型次之,建立型設計模式最少。編程
在寫這篇文章的時候,LZ考慮的最多的一個問題就是,從哪幾個維度去對比設計模式能讓你們更加清楚的看出各個設計模式的區別與聯繫,思來想去,LZ決定從如下幾個維度去對比設計模式。設計模式
以上即是24種設計模式的各個特色與部分模式的對比,若是總結的過程中有疏漏或是錯誤,請各位不吝賜教,LZ感激涕零。數據結構
此外須要說明的是,上面的機率當中有的會出現99.99999%這樣的數字,這是由於這個模式已經嵌入到JAVA類庫或是咱們經常使用的開源框架當中(標註一下:LZ總結的主要針對WEB開發,android的開發LZ並未接觸過,因此不包括在此列),好比迭代器模式,只要你使用過ArrayList或者HashSet,LZ就認爲這個模式被使用。這個使用頻率從某種意義上講,能夠認爲是該模式的重要程度,固然因爲這個頻率是LZ制定的,因此僅表明我的觀點。架構
這裏再針對設計模式的學習,給各位提一點點建議,僅供參考,請各位吸優排差,次序不分前後。框架
一、以前說過,學習設計模式除了努力以外還要靠緣分,因此若是有設計模式當時怎麼看都不明白,能夠暫且放下,以後說不定哪天你忽然之間就明白了。(此話並不是虛言,LZ不少次的頓悟常發生在上廁所、洗澡、回家路上等一些學習以外的時候。)post
二、對於已經在工做的人來講,能夠常思考一下,有沒有哪一個設計模式能夠改善現有的系統架構,但不要輕易付諸實踐。學習
三、學習設計模式以前,必定要先整明白UML類圖,什麼關聯,依賴,聚合,組合等等都得搞明白兒的,不然學習起來也依然會很吃力。
四、對於初學者,必定要在弄清楚標準的實現代碼以後,寫一個屬於本身的例子,哪怕是比葫蘆畫瓢,而後仔細體會設計模式使用先後的差別,主要從擴展性和類(類包括客戶端,而不只僅指設計模式中的角色)的職責兩個方面。
五、必定要將設計模式的變化點搞清楚,這點很是重要,甚至重要程度高於設計模式的場景、實現方式以及類和對象之間的耦合關係,不少時候,設計模式的濫用就是由於變化點沒搞清楚,以致於該變化的沒變化,不應變化的常常變化,增長系統的負擔。
六、設計模式不是一次性學習完就能夠扔掉不看的東西,而是要常常回過頭來看看,說不定每一次你都有不同的體會,並且通常狀況下,這些體會會愈來愈深入,愈來愈透徹。
七、若是可能的話,多研究一些開源框架,去找找它們裏面的設計模式。
LZ暫時也就只能想到這些,若是之後有想到再補充吧,各位若是有什麼好的建議也能夠與LZ分享一下。
到此爲止,整個設計模式系列就真真正正的完全結束了,當初寫的時候也沒想到本身能夠真的堅持下來,雖然說整整26篇文章不算多,可是LZ確實花費了大量的時間和精力,值得欣慰的是LZ本人也獲得了巨大的收穫,不只僅是對設計模式的理解日益加深,並且還得了很多猿友的支持,讓LZ對分享這一道路更加堅決。
之後的編程之路還很長,對於LZ來講,編程並不只僅是工做,而是一份事業,它給了LZ榮譽、金錢、成就感等等不少東西,但願各位至少在年輕的時候不要被一些悲觀化的觀點所幹擾,特別是對編程有着熱愛的猿友們,極致才能成就大道,但凡在一個領域有所成就者,大都是鑽研了數十年的成果。
固然,人各有志,LZ沒法左右他人,但LZ已經決定了本身的路,學火影裏鳴人的一句話,「這就是個人忍道。」