亂砍設計模式之零——序
作者[junguo](#)
有時候想知道偶然會為人生帶來什么樣的意義?作為一個懷疑論者,我對人生充滿了疑慮,對于偶然所起的作用也不是那么確定。但還是可以總結一些自己并不確定的結論。大學期間,成天曠課的我,那天偶然上了一堂軟件工程課(我不是計算機專業的,我們開這堂課本身就有些古怪)。那天老師不知道是一時興起,還是早有準備,在下課前他在黑板上畫了一個圖,標注了學習計算機的進階圖。這堂偶然的課,給我帶來了后來的失落和彷徨。
一個編程工具(VC,Delphi)
一門編程語言(C,Pascal)
常用軟件的熟練使用
計算機硬件(說白了就是裝機的水平)
他提供的進階圖如上所示,他似乎沒有說C和Pascal應該學到什么樣子。而當時的我每天泡在圖書館或者宿舍里,看的是數據結構,編譯原理一類的書。我為自己繪制的進階曲線是學習計算機系得所有基礎課程,然后考高級程序員。那時候對VC等工具并不感興趣,我覺得還是打好基礎容易進階。但聽完這堂課后,我的思路被打斷了,放棄了自己原有的理念,跑到書店買了一本VC基礎的書,那是我學生時代買的最貴的書(70多或者80多塊,書借人了),書上都是一個一個的例子,其實學完后我都沒弄明白MFC是怎么回事。只是學會了拖動不同的控件,在界面上做出不同的效果。憑良心說,那本書譯文的文筆不錯,也挺適合入門的,但它確實是本不折不扣的破書(國外圖書也不都是精品,垃圾也不少),在不懂C++的情況下,它可以教會你在界面上拖拉的本事,屏蔽了你學習的路線。而我們老師的進階圖無疑也是一張誤導圖,編程還是以數據結構等內容為基礎的,沒有了基礎,你也就沒有了前進的依仗。經過多年的失落彷徨,終于感覺找到了入門的通道。我也想總結一幅進階圖,但我發現自己總結不出來。龐龐雜雜接觸了太多的東西:匯編,破解,操作系統,C++,ASP,MFC,COM,ATL,VB,STL,數據庫;但接觸的東西都沒有到精通的地步,只是感覺現在理解東西沒有以前那么復雜了,但為什么會這樣,我自己也說不清楚。只是隱隱約約感覺理解這些東西和匯編有些關系,但這些都是在我單純學習匯編時候并沒有感覺到的。我如今也只是處于從初級向中級攀升的階段,真要搞出一個進階路線,可能效果就和我們老師的進階圖一樣只能誤人子弟了。所以如今放棄了這方面的努力,也許將來有一天我會去做。如今我想做的就是提供給那些和我一樣在從初級向中級攀升的人們一些共同感興趣的話題。而設計模式絕對是這樣一個話題,設計模式是幫助你真正理解OO設計的一把鑰匙,也許只有它能幫助你真正進入OO設計之門。在沒接觸設計模式之前,對于OO只知其形,不知其意。很多OO設計的原則,不知道我買的那本巨著《C++ Primer》中有沒有,反正我是一條也沒記住。如果你覺得你懂了面向對象的基本原理,懂得了虛函數,需要繼續緊階,那么我們可以一起探討這里談到的設計模式。
GOF出的《設計模式》買了很長時間了,翻看了也不下三篇,但每次總感覺收獲不大。雖被眾人奉為經典,但那本書不適合我,寫的太過抽象,沒有完整的例子,每次看過都沒留下多少印象。又是一個偶然,給我帶來了驚喜。我在網上找到了一份電子版的《Head First Design Patterns》,盡管只有第三章,但我發現這本書文筆清新,事例翔實,以前看多次沒記住的東西,這兒看一次就留下了深刻的印象,實是一本入門的好書。所以豪不猶豫買了本紙版的,不過如今該書只有影印版,但并不影響閱讀。以我大學英語四級沒過的水平都可以基本看懂這本書,我想搞計算機的應該都不成問題。
剛看到這本書的時候,第一個想法是自己能不能把它翻譯一下。與大家共享,但后來想想版權什么的東西,自己并不清楚。加之文筆拙劣,怕毀了原文的意境,所以放棄了這個念頭(畢竟我不是人民教師)。但總感覺有些失落,那就自己寫吧,把我能理解的總結出來,配以我想到例子。經過這么一番折騰,也幫助自己加深理解,因為看書的時候,還是會忽略太多的細節,只有經過了自己的手,才會摳出很多容易忽略的東西。這就是我寫這個系列的原因了。但也希望有同樣興趣的同仁共同討論了。
冠以亂砍的名字,是因為我不想把技術的東西搞得太枯燥。盡量加一些自己感興趣的內容進去,呵呵,有同樣愛好的同仁,我們也可以一起討論。但對于技術的內容,我還是盡最大的努力做到正確表述。
好了,要說的說完了。但聲明一下,今天看到自己以前寫的一篇文章被轉載,但被斬頭去尾,還刪除了署名。雖然不是太在意,但還是感覺不舒服。所以希望有仁兄要轉載的話,請保留署名;不要刪除任何內容,如果你不喜歡我的廢話,那就不要轉了。