基於java的設計模式入門(1)——為什么要學習設計模式


  大年初一,樓主在這里給大家拜年,祝大家碼上升職加薪,碼上有對象結婚,碼上有車有房,幸福安康。

  過完年,回學校注冊報道之后,大概就要回深圳到公司開始實習了。提高自己,無非就有兩種方式,一是看書學習,二是實踐體悟。起碼有兩個月沒怎么看過專業書和寫過代碼了,現在趁過年這段時間趕緊看看書,給自己充充電。

為什么要學習設計模式

  在學校里面學習一些基礎編程課程之后,例如掌握一門編程語言,以及學習算法與數據結構,難道我們就掌握了編程的全部了么?當然不是,如果我們只是滿足於寫出所謂正確的代碼,輸入變量,得出結果,哪怕從事了幾年的軟件開發都還是處在編寫簡單邏輯代碼+復制粘貼層次。

  這次的學習主要的參考資料就是程傑老師的《大話設計模式》。在程傑老師的書中,舉了一個非常經典的例子,我就稍微改一改,算是照搬過來,跟童鞋們一起進行學習,體會一下,什么才是面向對象,什么才叫可維護、可復用、可擴展、靈活性好。多說一句,這是我見過的解釋得最生動,最精彩的例子,沒有之一。

  三國演義大家都應該看過或者聽說過,前兩年電視劇《新三國》也火過好一陣子。據說曹操率兵攻打東吳,號稱百萬大軍,而東吳據說只有幾萬兵馬。曹軍駐扎赤壁,浩浩盪盪,一望無際。曹操覺得統一天下應該是沒問題了,那就先慶祝一下吧,所以就搞了個大Party。吃飽喝夠之后呢,曹操突然覺得要顯示一下自己的逼格,就出口成詩,吟道:“喝酒唱歌,人生真爽。······”。下面的文臣武將紛紛表示“好詩啊好詩”。這時候一個精於奉承的臣子就趕緊召集工匠刻板印刷,讓主公詩名遠揚,到時候自己好處肯定是少不了。

               

  趕緊先印出來幾張樣板呈給曹操過目,曹操想了想,覺得不對,說:“喝和唱,覺得用在這里怎么有點俗氣,改為‘對酒當歌’比較好。改!”。於是,工匠就很郁悶地去返工,重新刻板了。

         

  改過之后,曹操又想了想,覺得還不夠好,覺得“人生真爽”太過直白,應該改一改,說道:“當為‘人生幾何’為妙。再改!”。工匠一聽,只好再次加班。

        

  在三國時期,活字印刷還沒有發明出來,所以要改字的時候,就必須要整個刻板重新刻。而且,在刻字的時候,只要刻錯一個字,就必須整個板廢棄掉,重新刻。所以說,曹操這樣的行為就有點像客戶的需求變更一樣,如果我們的軟件開發還像雕版印刷那樣,就算是天天加班都無濟於事。看到活字印刷,只要更改四個字就可以了,而且不用全部重新推倒 重來。

          

  為什么說活字印刷術基本符合了軟件工程的四個要求呢?第一,要進行改動的話,只需要更改要改的字,這是可維護;第二,這些字並不是用完這次就沒用了,完全可以在后來的印刷中重復使用,這是可復用;第三,如果這首詩要加字,主要另外刻字就可以了,這是可擴展;第四,字的排列其實可能是豎排可能是橫排,只需要將活字移動就可以滿足不同的排列需求,這是靈活性好

  我們之所以要學習設計模式,並不是把具體的某些模式原原本本地照搬來用,而是通過學習這些模式,了解到底什么是“封裝變化”,“對象間松耦合”,“針對接口編程”等概念,從而設計出符合前面所講到四個特性——易維護,易擴展,易服用,靈活性好的程序。在書中,說道學習設計模式有四個層次,分別是

  1. 沒學之前是一點不懂,根本想不到用設計模式,寫出的代碼很糟糕;
  2. 學了幾個模式之后,於是總想着要用自己學過的模式,於是時常造成誤用模式而自己卻不知道;
  3. 學完全部的模式之后,感覺模式之間都很相似,分不清差異,有困惑,但深知誤用設計模式的害處,應用之時很猶豫
  4. 靈活應用模式,甚至不應用具體的某種模式也能設計出非常優秀的代碼,以達到無劍勝有劍的境界。

為什么說是基於java的設計模式入門?

  其實設計模式是不太分哪一種語言的,估計只要是面向對象就行,例如C++、java等等。我這次的參考材料主要是程傑老師的《大話設計模式》,而里面的例子都是用C#寫的,說實話看得並不是很爽。再加上我想着通過寫博客來幫助我學習設計模式,所以就決定在看書的同時,通過舉例java程序來描述整一個過程。

  在學校的時候,《算法與數據結構》的課本我見過有基於C++的和Java的。這就說明,雖然算法與數據結構是通用的,但是在特定的講授當中,為了能夠更方便學員讀懂例子和實際編譯運行,用不同的語言詮釋也是挺有必要的。

 

我的更新計划

  打算通過七到十篇博客來進行這次的入門學習,就在元宵節前完成,所以至少實現兩天一篇的更新,希望童鞋們監督我咯。

 

閑聊幾句

  不知道大家會不會跟我有差不多的感覺,就是會覺得過年越來越沒意思了,跟小時候簡直沒法比。至少我就是這樣,每年春節都覺得有點無聊,還得貼春聯,漿糊臟手。自從上了大學有了幾百幾千塊自己可以自主支配的生活費之后,已經很難為過年的四位數左右的壓歲錢感到激動了。不過這幾天自從更新了微信5.2之后,新增的“新年紅包”功能又重新對紅包有了感覺。

  新年紅包有兩種,拼手氣群紅包和普通紅包。其實都很好理解,普通紅包就是送給特定一個人,規定金額。比較有意思的是群紅包,限定總額和個數,每個紅包隨機的金額,能拿多少就全拼手氣了,挺有意思。如果想發紅包,必須要綁定銀行卡,開通微信支付,同樣地,如果想把拿到的紅包提現,也必須這樣做。

  這個功能一出來,很多人都玩得不亦樂乎,而一些互聯網名人也贊不絕口。丁香園CTO、小道消息的馮大輝就說了,新年紅包這個功能的團隊應該拿騰訊的年度最佳產品獎。的確,這樣一個免費的擴展用戶群的策略,無疑要比最近打的送錢優惠免單要來得高明得多。

  推廣,有時候並不需要所謂的廣告,你做的好了、有趣了,大家自然而然會去用,會介紹別人一起玩。我現在寫文章也是,更樂意專注於把東西寫得有趣,去想別人會想讀到什么樣的內容。往這個方向想,只要努力對了,最后肯定是,大,家,開,心。

        

PS:喜歡我的閑聊么?其實我有一個微信公眾賬號,上面幾乎每天都會發一篇文章,基本上都是類似這樣的內容,就是我的一些經歷感悟和想法看法。如果感興趣的話,可以在公眾號中搜索“華工小Y”添加關注。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM