我的处女作《设计模式之禅》——前言
????? 終于可以寫前言了,這說明本書已經(jīng)基本完成,可以長噓一口氣了。
為什么寫這本書
????? 為什么寫這本書?今年5月份,我在JavaEye上發(fā)了一個帖子,其中提到自己已經(jīng)工作9年了,總覺得這9年不應(yīng)該就這么荒廢了,應(yīng)該給自己這9年的工作寫一個總結(jié),總結(jié)的初稿就是這本書。
????? 在談為什么寫這本書之前,先抖抖自己這9年職業(yè)生涯吧。大學(xué)時我是學(xué)習(xí)機械的,當(dāng)時計算機剛剛熱起來,自己也喜歡玩一些新奇的東西,記得最清楚的是用VB寫了一個自由落體的小程序,模擬小球從桌面掉到地板上,然后計算反彈趨勢,很有成就感。于是2000年畢業(yè)時,我削尖了腦袋進入了IT行業(yè),成為了一名真正的IT男,干著起得比雞早、睡得比雞晚(這個雞怎么理解,隨你了)的程序員工作,操著賣白粉的心,拿著賣白菜的錢。IT男的辛酸有誰知曉!
????? 坦白地來說,我的性格比較沉悶,屬于典型的程序員型悶騷,比較適合做技術(shù)研究。在這9年里,項目管理做過,系統(tǒng)分析做過,小兵當(dāng)過,團隊領(lǐng)導(dǎo)人也當(dāng)過,但至今我還是一個做技術(shù)的。要總結(jié)這9年技術(shù)生涯,總得寫點什么吧,最好是還能對其他人有點兒用的。那寫什么好呢?Spring、Struts等工具框架類的書太多太多,很難再寫出花樣來,經(jīng)過一番思考,最后選擇了一個每一位技術(shù)人員都需要掌握的、但普及程度還不是非常高的、又稍微有點難度的主題——設(shè)計模式(Design Pattern,簡稱DP)。
????? 中國人有不破不立的思維,遠的如秦始皇焚書坑儒、項羽火燒阿房宮,近的如破“四舊”,為什么要破才能立呢?為什么不能持續(xù)地發(fā)展呢?正是由于有了這樣的思想,于是乎能改的就改,不能改的就推翻重寫,沒有一個持續(xù)開發(fā)藍圖,你說這是誰的錯呢?是你架構(gòu)師的錯,你不能持續(xù)地擁抱變化,這是一個系統(tǒng)最失敗的地方。那怎么才能實現(xiàn)擁抱變化的理想呢?設(shè)計模式!
????? 設(shè)計模式是什么?它是一套理論,由軟件界的先輩們(具體的說就是“四人幫”,The Gang of Four,包括:Erich Gamma、Richard Helm、Ralph Johnson、John Vlissides)總結(jié)出的一套可以反復(fù)使用的經(jīng)驗,它可以提高代碼的可重用性,增強系統(tǒng)的可維護性,以及解決一系列的復(fù)雜問題。做軟件的都知道需求是最難把握的,我們可以分析現(xiàn)有的需求,預(yù)測可能發(fā)生的變更,但是我們不能控制需求的變更。問題來了,既然需求的變更是不可控的,那如何擁抱變化呢?幸運的是,設(shè)計模式給了我們指導(dǎo),專家們首先提出了6大設(shè)計原則,但這6大設(shè)計原則僅僅是一系列“口號”,真正付諸實施還需要有詳盡的指導(dǎo)方法,于是23個設(shè)計模式出現(xiàn)了。
????? 設(shè)計模式已經(jīng)誕生15年了,在這15年里出版了很多關(guān)于它的經(jīng)典著作,相信大家都能如數(shù)家珍。但是,有這么多的書頂個屁用,工作5年了還不知道什么是策略模式、狀態(tài)模式、責(zé)任鏈模式的程序員大有人在。不信?你找個機會去“虛心”地請教一下你的同事,看看他對設(shè)計模式有多少了解。不要告訴我要翻書才明白!設(shè)計模式不是工具,它是軟件開發(fā)的哲學(xué),它能指導(dǎo)你如何去設(shè)計一個優(yōu)秀的架構(gòu)、編寫一段健壯的代碼、解決一個復(fù)雜的需求。
????? 因為它是軟件行業(yè)的經(jīng)驗總結(jié),因此它具有更廣泛的適應(yīng)性,不管你使用什么編程語言,不管你遇到什么業(yè)務(wù)類型,設(shè)計模式都可以自由地“侵入”。
????? 因為它不是工具,所以它沒有一個可以具體測量的標(biāo)尺,完全以你自己的理解為準(zhǔn),你認為自己多了解它,你就有可能產(chǎn)生多少的優(yōu)秀代碼和設(shè)計。
????? 因為它是指導(dǎo)思想, 你可以在此基礎(chǔ)上自由發(fā)揮,甚至是自己設(shè)計出一套設(shè)計模式。當(dāng)然可以了!
????? 世界上最難的有兩件事:一是讓人心甘情愿地把錢掏出來給你,二是把自己的思想灌輸?shù)絼e人的腦子里。設(shè)計模式就屬于第二種,它不是一種具體的技術(shù),不像Struts、Spring、Hibernate等框架。一個工具用久了可以熟能生巧,就像砌墻的工人一樣,長年累月地砌墻,他也知道如何把墻砌整齊,如何多快好省地干活,這是一個人的本能。我們把Struts用得很溜,把Spring用得很順手,這非常好,但這只是一個合格的程序員應(yīng)該具備的基本能力!于是我們被冠以代碼工人(Code Worker)——軟件行業(yè)的體力勞動者。
????? 如果你通曉了這23種設(shè)計模式就不同了,你可以站在一個更高的層次去賞析程序代碼、軟件設(shè)計、架構(gòu),完成從代碼工人到架構(gòu)師的蛻變(感覺有點像電視購物,極盡夸張和誘惑之能事,不過設(shè)計模式和電視購物不同,它對你只有好處,沒有壞處)。注意,我說的是“通曉”,別告訴我你把23個設(shè)計模式的含義、適應(yīng)性、優(yōu)缺點都搞清楚了就是通曉。錯了!沒有工作經(jīng)驗的積累是不可能真正理解設(shè)計模式的,這就像大家小時候一直不明白為什么爸爸媽媽要工作而不能每天陪自己玩一樣。
????? 據(jù)說有的大學(xué)已經(jīng)開了設(shè)計模式這門課,如果僅僅是幾堂課,讓學(xué)生對設(shè)計模式有一個初步的了解,我覺得并無不妥,但如果是專門的一門課程,我建議取消它!因為對一個尚無項目開發(fā)經(jīng)驗的學(xué)生來說,理解設(shè)計模式不是一般困難,而是非常非常困難!之前沒有任何的實戰(zhàn)經(jīng)驗,之后也沒有可以立即付諸實踐的場景,這樣能理解設(shè)計模式嗎?
????? 在編寫本書之前,23個設(shè)計模式我都用過,而且還算比較熟練,但是當(dāng)真正要寫到書中時,感覺心里沒普兒了。這個定義是這樣的嗎?是需要用抽象類還是該用接口?為什么在這里不能抽取抽象呢?為什么在實際項目中這個模式要如此蛻化?這類小問題有時候很糾結(jié),需要花費大量的精力和時間去分析和確認。所以,在寫作的過程中我有過很多憂慮,擔(dān)心書中會有太多瑕疵,這種憂慮現(xiàn)在仍然存在。遇到挫折的時候也氣餒過,但是我堅信一句話:“開弓沒有回頭箭,回頭既是空”,既然已經(jīng)開始,就一定要圓滿完成。于是在2009年即將過去的今天,終于完成了本書。
本書的特色
????? 簡單、通俗、易懂,但又不膚淺,這是本書的最大特色。自己看過的技術(shù)書還算比較多,很痛恨那種大塊頭的巨著,擱家里當(dāng)枕頭都覺得太硬。如果要是再晦澀難懂點,那根本沒法看,看起來實在是太累。設(shè)計模式本本就是理論性的知識,講解的難度比較大,但我相信這本書能夠把你對設(shè)計模式的恐懼一掃而光。不信?挑幾頁看看先!
????? 我的理念是:像看小說一樣閱讀本書。我盡量用淺顯通俗的語言講解,盡量讓你有繼續(xù)看下去的欲望,盡量努力讓你有興趣進入設(shè)計模式的世界,興趣是第一老師嘛!雖然我盡量讓這本書淺顯、通俗、易懂,但并不代表我的講解就很膚淺。每個設(shè)計模式講解完畢之后,我都附加了兩個非常精華的部分:設(shè)計模式擴展和最佳實踐,這是俺壓箱底的技能了,為了博君一看,沒招了,抖出來吧!尤為值得一提的是,本書還有設(shè)計模式PK和混編設(shè)計模式兩大部分內(nèi)容教你如何自如地去運用這些設(shè)計模式,這是當(dāng)前所有設(shè)計模式類的圖書都不具備的,連“四人幫”的那本書也不例外。
????? 我很討厭技術(shù)文章中夾雜著的那些晦澀難懂的文字,特別是一堆又一堆的名詞堆砌,讓人看著就反胃。但是為了學(xué)習(xí)技術(shù),為了生存,還是必須看下去。國內(nèi)的技術(shù)文檔,基本上都是板著一副冷面孔講技術(shù),為什么要把技術(shù)弄得這么生硬呢?技術(shù)也有它幽默、柔情的一面,只是被我們的“孔夫子們”掩蓋了,能用蘿卜、白菜這種尋常人都熟悉的知識來講解原子彈理論的人,那是牛人,我佩服這樣的人。記住,用一堆名詞把你忽悠暈的人很可能什么都不懂!
????? 本書想告訴你的是,技術(shù)也可以很有樂趣,也可以讓你不用皺著眉頭思考,等待你的只是靜靜地看,慢慢的思考,本書的內(nèi)容會潤物細無聲地溶入你的思維中。
本書面向的讀者
????? 熱愛技術(shù)并且討厭枯燥乏味技術(shù)文章的讀者都可以看本書;
????? 你是程序員,沒問題,本書能夠讓你寫出更加高效、優(yōu)雅的代碼;
????? 你是架構(gòu)師,那更好,設(shè)計模式可讓你設(shè)計出健壯、穩(wěn)定、高效的系統(tǒng),并且自動地預(yù)防未來業(yè)務(wù)變化可能對系統(tǒng)帶來的影響;
????? 你是項目經(jīng)理,也OK,設(shè)計模式可以讓你的工期大大縮短,讓你的項目團隊成員快速地理解你的意圖,最終的成果就是優(yōu)質(zhì)的項目:高可靠性,高穩(wěn)定性,高效率和低維護成本。
如何閱讀本書
????? 首先聲明,本書中所有的例子都是用Java語言來實現(xiàn)的,但是你可以隨手翻翻看,基本上能保證每三條語句一個注釋,可以說是在用咱們的母語講解設(shè)計模式。即使你不懂Java語言,也沒有關(guān)系,只要知道在Java中雙斜杠(//)代表注釋就足夠了,況且Java如此強大和盛行,多了解一點沒有壞處。類圖看不懂?沒關(guān)系,不影響你理解設(shè)計模式,多看看就懂了!
????? 如果你還沒有編程經(jīng)驗,我建議你把它當(dāng)作小說來看,懂行的看門道,不懂行的看熱鬧,這里的熱鬧足夠多,夠你看一壺的了。你現(xiàn)在能看懂多少是多少,不懂沒有關(guān)系,你要知道,經(jīng)驗不是像長青春痘一樣,說長就長出來了,它是需要時間積累的,需要你用心去感受,然后才能明白為什么要如此設(shè)計。
????? 如果你已經(jīng)對編程有感覺了(至少2年開發(fā)經(jīng)驗),我相信你都能看懂,但能“懂”到什么程度,就很難說了,看你的水平了。但是,我可以保證,這里的設(shè)計模式都是你能看懂的,沒有你看不懂的!我建議你通讀這本書,然后挑門你最得意的編程語言,動手寫吧!給自己制定一個計劃,每天編寫一段代碼,不需要太多,200行足夠,時不時地把設(shè)計模式融入到你的代碼中。甭管是什么代碼,比如你想編寫一個識別美女圖片的程序,好呀,抓緊時間去寫吧,寫好了就不用到處看美女了,程序一跑就把網(wǎng)上的美女圖片都抓過來了,牛呀(記住,程序?qū)懞昧艘窒斫o我)。看吧,堅持下去,一年以后你再跟你的同儕比較一下,那差距肯定不是一般的大。
????? 如果你是資深工程師、架構(gòu)師、技術(shù)顧問等高等級的技術(shù)人員,那我告訴你,你找對這本書了。系統(tǒng)架構(gòu)沒有思路?沒有問題,看看擴展部分,它會開闊你思路。系統(tǒng)的維護成本居高不下?看看本書,設(shè)計模式也許能幫你省點銀子。開發(fā)資源無法保證?設(shè)計模式能讓你用有限的資源(軟硬件資源和人力資源)設(shè)計出一個優(yōu)秀的系統(tǒng)。項目質(zhì)量參差不齊,缺陷一大堆?多用設(shè)計模式,它會給你意想不到的效果。給人講課沒有素材?沒問題,本書中的素材足以讓你贏得陣陣掌聲!
????? 編程是一門藝術(shù)活,我有一個同事,能把類圖畫成一個小烏龜?shù)男螤?#xff0c;天才呀!作為一位技術(shù)人員,最基本的品質(zhì)就是誠實,“知之為知之,不知為不知,是知也”,自己不懂沒有關(guān)系,去學(xué),學(xué)無止境,但是千萬不要貪多,這抓一點,那挖一點,好像什么都懂,其實什么都不懂。中國一直推崇復(fù)合型人才,我不是很贊成,因為這對年輕人來說是一個誤導(dǎo)。先精一項技術(shù),然后再發(fā)散學(xué)習(xí),先點后面這才是正道。
????? 記得《武林外傳》中有這樣一段對話:
????? 刑捕頭:手中無刀,心中有刀。
????? 老白:錯了,最高境界是手中無刀,心中也無刀。
????? 體驗一下吧,我們的設(shè)計模式就是一把刀,極致的境界就是心中無設(shè)計模式,代碼亦無設(shè)計模式——設(shè)計模式隨處可見,俯拾皆是,已經(jīng)融入軟件設(shè)計的靈魂中,這才是高手中的高手,簡稱高高手。
????? 哦,最最重要的忘記說了,請把附錄中的“23個設(shè)計模式附圖”撕下來,貼在你的辦公桌前,時不時地看看,也讓老板看看,咱是多么的用心!
致謝
????? 本書的寫作耗時7個月,可以說是榨干了海綿里所有的水——基本上能用的時間都用上了。在公交車上打腹稿,干過!在馬桶上查資料,干過!在睡夢中思考案例,也有過!就差沒有走火入魔了!
????? 首先,感謝楊福川編輯,沒有他的慧眼,這本書不可能出版。其次,感謝妻子和兒子,每天下班回到家,一按門鈴,兒子就在門后叫:“我來開門,我來開門”。兒子三歲,太調(diào)皮了,他不睡覺我基本上是不能開寫的,我一旦開始寫東西,他就跑過來問:“爸爸,你在干什么呀”,緊接著下一句就是:“爸爸,你陪我玩”,基本都是拿我當(dāng)玩具,別的小朋友都是把父親當(dāng)馬騎,他卻不,他把我當(dāng)摩托車騎,還要加油門,發(fā)動······小家伙腳太重了,再騎摩托,非被他踩死不可!
????? 再次,還要感謝《Spring技術(shù)內(nèi)幕》的作者計文柯先生、《冒號課堂》的作者鄭暉先生、《Spring揭秘》的作者王福強先生、《GWT揭秘》的作者徐彬先生,他們專業(yè)、細致、耐心的審核使得本書更加完美,特別是鄭暉老師,雖言語不多,但言必中的,受益匪淺,非常幸運能獲得他們四位的指導(dǎo)!
????? 最后要感謝我的朋友王驄,周末只要小家伙在家,我只有找地方寫書的份兒,王驄非常爽快地把鑰匙給我,讓我有一個安靜的地方寫書。一個人沉靜在自己喜歡的世界里也是一件非常幸福的事。
????? 當(dāng)然,還要感謝JavaEye上所有頂貼的網(wǎng)友,沒有你們的支持我就失去了編寫的動力,就像希臘神話中的巨人安泰失去了大地的力量一樣,是你們的回帖讓我覺得不孤單,讓我知道我不是一個人在戰(zhàn)斗!
????? 最后,再次對本書中出現(xiàn)的錯誤表示歉意,真誠地接受大家轟炸!
?
????? 有關(guān)本書的一些活動鏈接鏈接如下:
???? 免費試讀活動(好不好,你說了算):
?
書籍封面:
轉(zhuǎn)載于:https://www.cnblogs.com/cbf4life/archive/2010/03/16/1686935.html
總結(jié)
以上是生活随笔為你收集整理的我的处女作《设计模式之禅》——前言的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 在ne中分析贱谈.net中简体转繁体
- 下一篇: asp.net mvc 2 Displa