大話設計模式

出版時間:2007-12  出版社:清華大學出版社  作者:程杰  頁數(shù):368  
Tag標簽:無  

前言

本書是一本程序集?NO。本書是一本故事集?NO。本書是一本通過故事講述程序如何設計的方法集。本書是給連Hello World都沒寫過的非程序員看的書嗎?NO。本書是給玩過穿孔紙帶(0/1)、寫過匯編、BASIC、C、C++、Delphi、Java、C#等語言,開發(fā)過覆蓋全球、使用人數(shù)過億、數(shù)百萬行代碼等大型系統(tǒng)的骨灰級程序員看的書嗎?NO。本書希望能給渴望了解OO世界的初學者、困惑于僵硬、脆弱、無法復用的代碼編程體驗者、一直打著OO編程的旗號,做著過程式開發(fā)的基于對象的編程實踐者一些好的建議和提示。本書起因寫本書源于我一次做培訓的經(jīng)歷,學生大多是計算機專業(yè)的學生或有過一定經(jīng)驗的在職開發(fā)者。他們都知道類、方法、構造方法、甚至抽象類、接口等概念,并用 Visual Studio寫過不少的Windows或Web程序,可是當我提問為什么要用面向對象,它的好處在哪里時,卻沒有人能完整地講得出來,多數(shù)人的反應是,概念知道的,就是表達不清楚。針對于此,我就舉了中國古代的四大發(fā)明中活字印刷的例子(見第1章),通過一個虛構的三國曹操做詩的情景,把面向對象的幾大好處講解了一下,學生普遍都感覺通俗易懂,覺得這樣的教學比直接告訴面向對象有什么好處要更加容易理解和記憶。這就使得我不斷地思考這樣一個問題,學一門技術是否需要趣味性、通俗性的引導。我在思考中發(fā)現(xiàn),看小說時,一般情況下我都可以完整地讀完它,而閱讀技術方面的圖書,卻很少有真正的每章每頁的仔細閱讀。盡管這兩者是有很大區(qū)別,技術書中可能有不少知識是已經(jīng)學會或暫時用不上的內(nèi)容,但也不得不承認,小說之所以可以堅持讀完是因為對它感興趣,作者的文字吸引你。而有些技術書的枯燥乏味使得閱讀產(chǎn)生了困難,通常讀個前幾章就留待以后再說了。技術課的教學同樣如此,除非學生是抱著極大的學習動機來參與其中,否則照本宣科的教學、枯燥乏味的講解,學生一定會被龐雜的概念和復雜的邏輯攪暈了頭腦,致使效果大打折扣。也正因為此,往往造成部分學生,學了四年的計算機編程,卻可能連面向對象有什么好處都還說不清。為什么不可以讓技術書帶點趣味性呢,哪怕這些趣味性與所講的技術并不十分貼切,只要不是影響技術核心的本質,不產(chǎn)生重大的錯誤,讓讀者能輕松閱讀它,并且有了一定的了解和感悟,這要比一本書寫得高深無比,卻被長期束之高閣要好得多。也正是這個原因,本人開始了關于設計模式的趣味性寫作的嘗試。本書讀者顯然本書不是給無任何編程經(jīng)驗的人看的,對于想入這一行的朋友來說,找一門編程語言,從頭開始或許才是正道。而本書也不太適合有了多年面向對象開發(fā)經(jīng)驗,對常用的設計模式了如指掌的人看的。畢竟這里更多的是一些基礎性的東西。我時常拿程序員的成長與足球運動員的成長做對比。GoF 的《設計模式》好比是世界頂級足球射門集錦,《重構》、《敏捷軟件開發(fā)》、《設計模式解析》好比是一場場最精彩的足球比賽。我為之瘋狂,為之著迷??墒俏也⒉恢皇窍胱鲆粋€球迷(軟件使用者),而是更希望自己能成為一個足球運動員(軟件設計編程者),能夠親自上場比賽,并且最終能成為球星(軟件架構師)。我仔細地閱讀這些被譽為經(jīng)典的著作,認真地實踐其中代碼,但是我總是半途而廢、堅持不下去,我痛恨自己意志力的薄弱、憎惡自己無端地放棄,難道我真的就是那么的笨?痛定思痛,反思悔過。我終于發(fā)現(xiàn),貝利、馬拉多納不管老、胖是用來敬仰的,貝克漢姆、羅納爾迪尼奧不管美、丑是用來欣賞的,但他們的球技……嗨,客氣地說,是不容易學會的,客觀地說,是不可能學得會的。為什么會這樣?原來,我學習中缺了一個很重要的環(huán)節(jié),我們在看到了精彩的球賽,欣賞球星高超球技的同時,卻忽略了球星的成長過程。他們盡管有一定天分,但卻也是從最底層通過努力一點一點慢慢顯露出來的,我們需要的不僅僅是世界杯上的那定乾坤的一腳,更需要這一腳之前是如何練出那種神奇的方法,對于程序員來講,精彩的代碼是如何想出來的,要比看到精彩的代碼更加令人期待。本書顯然不是培養(yǎng)足球明星(軟件架構師)的俱樂部,而是訓練足球基本功的學校,培訓的是初學足球的小球員(面向對象的程序員),本書希望的是讀者閱讀后可以打好面向對象的基礎,從而更加容易并深入的去理解和感受GoF的《設計模式》以及其他大師作品的魅力。本書定位本書是在學習眾多大師智慧結晶的圖書作品、分享了網(wǎng)上多位朋友的實踐經(jīng)驗的基礎上,加之自己的編程感受寫出來的。正如牛頓有句名言:“如果說我比別人看得更遠些,那是因為我站在了巨人的肩上。”但顯然,本書并沒有創(chuàng)造或發(fā)現(xiàn)什么模式,因此談不上站在巨人肩膀上看得更遠。所以作者更希望本書能成為一些準備攀登面向對象編程高峰的朋友的登山引路人、提攜者,在您登山途中迷路時給予指引,在您峭壁攀巖摔跤時給予保護。本書特色本書有兩個特色,第一特色是重視過程。看了太多的計算機編程類的圖書,大多數(shù)書籍都是集中在講授優(yōu)秀的解決方案或者一個完美的程序樣例,但對這些解決方案和程序的演變過程卻重視不夠,好書之所以好,就是因為作者可以站在學習者的角度去講解問題所在,讓學習門檻降低。《重構與模式》中有一句經(jīng)典之語:“如果想成為一名更優(yōu)秀的軟件設計師,了解優(yōu)秀軟件設計的演變過程比學習優(yōu)秀設計本身更有價值,因為設計的演變過程中蘊藏著大智慧?!北救司拖M芡ㄟ^小菜與大鳥的對話,在不斷地提問與回答過程中,在程序的不斷重構演變中,把設計模式的學習門檻降低,讓初學者可以更加容易地理解,為什么這樣設計才是好,是如何想到這樣設計的。本書的第二個特色就是貼近生活。盡管編程是嚴謹?shù)?,不容大話和戲說。但生活卻是多姿多彩的,而設計模式也不是完全孤立于現(xiàn)實世界而憑空想出來的理論。事實上所有的模式都可以在生活中找到對應。因此,通過主人公小菜和大鳥的對話,將求職、面試、工作、交友、投資、兼職、辦公室文化、生活百味等等非常接近程序員生活原貌的場景寫到了書中,用一個個小故事來引出模式,會讓讀者相對輕松地進入學習設計模式的狀態(tài)。當然,此舉的最大目的還是為了深入淺出,而非純粹噱頭。本書內(nèi)容本書通篇都是以情景對話的形式,用一個又一個的小故事或編程示例來組織的。共分為四個部分。第一部分是面向對象的意義和好處以及幾個重要的設計原則,通過小菜面試的失敗引出;第二部分是詳細講解23個設計模式;第三部分是對設計模式的總結,利用小菜夢到的超級模式大賽的場景,把所有的面向對象和模式概念都擬人化來趣味性的總結設計模式之間的異同和關鍵點。第四部分是附錄,主要是針對對面向對象不熟悉讀者的一個補充,通過一個例子的演變介紹了類、封裝、繼承、多態(tài)、接口、事件等概念。本書人物及背景小菜:原名蔡遙,22歲,上海人,上海某大學計算機專業(yè)大學四年級學生,成績一般,考研剛結束,即將畢業(yè),正求職找工作。大鳥:原名李大遼,29歲,小菜的表哥,云南昆明人,畢業(yè)后長期從事軟件開發(fā)和管理工作,近期到上海發(fā)展,借住小菜家在寶山的空套房內(nèi)。小菜以向大鳥學習為由,也從市區(qū)父母家搬到寶山與大鳥同住。本書研讀方法本書建議按順序閱讀,如果您感覺由于面向對象知識的匱乏,例如對繼承、多態(tài)、接口、抽象類的理解不足,造成閱讀上的困難,不妨先閱讀附錄一的“培訓實習生——面向對象基礎”部分,然后再從第1章開始閱讀。如果您已經(jīng)對不少設計模式熟悉,也不妨挑選不熟悉的模式章節(jié)閱讀。盡管本書中的代碼都提供下載,但不經(jīng)過讀者的自己手動輸入過程,其實閱讀的效果是大打折扣的。強烈建議讀者根據(jù)樣例自己寫程序,只有在運行出錯,達不到預期效果時再查看本書提供的源程序,這樣或許才是最好的學習方法。有問題可及時與我聯(lián)系。我的電子郵箱是chengjielong@163.com,博客是 http://cj723.cnblogs.com/。本書中的很多精華都來自許多大師作品,建議讀者通過筆記形式記錄,這將有助于您的記憶和理解設計模式,增強最終的讀書效果。本書中出現(xiàn)的“[ ]”是表示句子摘自某書。例如,“策略模式(Strategy):它定義了算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化不會影響到使用算法的客戶[DP]。”其中“[DP]”表示此名摘自《設計模式:可復用面向對象軟件的基礎》,詳細摘要說明請參看附錄二。本書中29章中的虛擬人物姓名都是軟件編程中的專業(yè)術語,因此凡是專業(yè)術語被指向人物姓名的都用斜體字表示,以和實際術語區(qū)分。例如,“第一位是我們OOTV創(chuàng)始人,面向對象先生”,這里的斜體字面向對象指人名。關于本書學習的疑問解答看本書需要什么基礎?主要是C#或其他編程語言的基礎知識,如變量、分支判斷、循環(huán)、函數(shù)等編程基礎,關于面向對象基礎可參看本書的附錄一。設計模式是否有必要全部學一遍?答案是,Yes!別被那些說什么設計模式大多用不上,根本不用全學的輿論所左右。盡管現(xiàn)在設計模式遠遠不止23種,對所有都有研究是不太容易的,但就像作者本人一樣,在學習GoF總結的23個設計模式過程中,你會被那些編程大師們進行偉大的技術思想洗禮,不斷增加自己對面向對象的深入理解,從而更好的把這種思想發(fā)揚光大。這就如同高中時學立體幾何感覺沒用,但當你裝修好房子購買家俱時才知道,有空間感,懂得空間計算是如何的重要,你完全可能遇到買了一個大號的冰箱卻放不進廚房,或買了開關門的衣櫥(移門不占空間)卻因床在旁邊堵住了門而打不開的尷尬。重要的不是你將來會不會用到這些模式,而是通過這些模式讓你找到“封裝變化”、“對象間松散耦合”、“針對接口編程”的感覺,從而設計出易維護、易擴展、易復用、靈活性好的程序。成為詩人后可能不需要刻意地按照某種模式去創(chuàng)作,但成為詩人前他們一定是認真地研究過成百上千的唐詩宋詞、古今名句。如果說,數(shù)學是思維的體操,那設計模式,就是面向對象編程思維的體操。我學了設計模式后時常會過度設計,如何辦?作者建議,暫時現(xiàn)象,繼續(xù)努力。設計模式有四境界:1.沒學前是一點不懂,根本想不到用設計模式,設計的代碼很糟糕;2.學了幾個模式后,很開心,于是到處想著要用自己學過的模式,于是時常造成誤用模式而不 自知;3.學完全部模式時,感覺諸多模式極其相似,無法分清模式之間的差異,有困惑,但深知誤用之害,應用之時有所猶豫;4.靈活應用模式,甚至不應用具體的某種模式也能設計出非常優(yōu)秀的代碼,以達到無劍勝有劍的境界。從作者本人的觀點來說,不會用設計模式的人要遠遠超過過度使用設計模式的人,從這個角度講,因為怕過度設計而不用設計模式顯然是因噎廢食。當你認識到自己有過度使用模式的時候,那就證明你已意識到問題的存在,只有通過不斷的鉆研和努力,你才能突破“不識廬山真面目,只緣身在此山中”的瓶頸,達到“會當凌絕頂,一覽眾山小”的境界。編程語言的差異本書講的是面向對象設計模式,是用.NET中的C#語言編寫,但本書并不是主要講解C#語言或.NET框架的圖書,因此本書同樣適合Java、VB.NET、C++等其他一些面向對象語言的讀者閱讀來學習設計模式。就Java而言,主要差異來自C#對于子類繼承父類或實現(xiàn)接口用的都是“:”,而Java中兩者是有區(qū)別的。當Cat繼承抽象類Animal時,Java語法是public class Cat extends Animal當Superman實現(xiàn)接口IFly時,Java語法是public class Superman implements IFly然后Java中所有的方法都是虛擬的,因此不用指定new或是override修飾符。還有一些其他差異,但基本都不影響本書的閱讀。對于VB.NET的程序員,如果閱讀困難,不妨去網(wǎng)上查找關于轉換C#與VB.Net語言的工具,比如http://www.kamalpatel.net/ConvertCSharp2VB.aspx,將下載本書的源代碼轉換后再進行閱讀。C++的程序員,可能在語言上會有些差異,不過本書應該不會因為語言造成對面向對象思想的誤讀。不是一個人在戰(zhàn)斗首先要感謝我的妻子李秀芳對我寫作本書期間的全力支持,沒有她的理解和鼓勵,就不可能有本書的出版。而我們的寶寶也將在2008年初出生,希望等寶寶懂事后能知道,在寶寶的母親懷胎過程中,寶寶的父親也在為書的誕生而努力。也希望本書成為贈送給他或者她的最好的禮物。父母的養(yǎng)育才有作者本人的今天,本書的出版,尋根溯源,也是父母用心教育的結果。養(yǎng)育之恩,沒齒難忘。本書起源于本人在“博客園”網(wǎng)站的博客http://cj723.cnblogs.com/中的一個連載文章《小菜編程成長記》。沒想到連載引起了不小的反應,網(wǎng)友們普遍認為本人的這種技術寫作方式新穎、有趣、喜歡看。正是因為眾多網(wǎng)友的支持,本人有了要把GoF的23種設計模式全部成文的沖動。非常感謝這些在博客回復中鼓勵我的朋友。這里需要特別提及洪立人先生,他是本人在寫書期間共同為理想奮斗的戰(zhàn)友,寫作也得到了他的大力支持和幫助,我寫作的不少妙句也來自我們倆共同合作的網(wǎng)站http://www.miaoju.net。在此對兩位表示衷心的感謝。寫作過程中,本人參考了許多國內(nèi)外大師的設計模式的著作。尤其是《設計模式》(作者:簡稱GoF的Erich Gamm,Richard Helm,Ralph Johnson,John Vlissides)、《設計模式解析》(作者:Alan Shalloway,James R. Trott)、《敏捷軟件開發(fā):原則、模式與實踐》(作者:Robert C.Martin)、《重構——改善既有代碼的設計》(作者:Martin Fowler)、《重構與模式》(作者:Joshua Kerievsky)、《Java與模式》(作者:閻宏等等,沒有他們的貢獻,就沒有本書的出版。也希望本書能成為更好閱讀他們這些大師作品的前期讀物。寫作過程中,本人還參考了http://www.dofactory.com/ 關于23個設計模式的講解,并引用了他們的結構圖和基本代碼。在博客園中的許多朋友,比如張逸、呂震宇、李會軍、idior、Allen Lee的博文,MSDN SmartCast中李建忠的講座,CSDN博客中的大衛(wèi)、ai92的博文,網(wǎng)站J道www.jdon.com 的版主banq的文章都給本人的寫作提供了非常大的指引和幫助,在此表示感謝。另外博客園的雙魚座先生還對本人的部分代碼提出了整改意見,也表示衷心的謝意。詳細參考資料與網(wǎng)站鏈接,見附錄二。事實上,由于本人長期有看書記讀書筆記的習慣,所以書中引用筆記的內(nèi)容,也極有可能是來自某本書或者某個朋友的博客、某個網(wǎng)站的文章。而本人已經(jīng)無法一一說出其引用的地址,但這些作者的智慧同樣對本書的寫作帶來了幫助,在此只能說聲謝謝。最后,對本書的責任編輯陳冰先生及清華大學出版社的相關工作人員,表示由衷的感謝。本書的出版離不開陳先生的指導和其他工作人員的辛勤工作。程 杰2007年7月序這本書最初起源于作者程杰在其博客中所寫的連載文章——《小菜編程成長記》。隨著文章的一篇篇發(fā)布,這些文章新穎的表現(xiàn)形式和獨特的風格受到了眾多讀者的關注和喜愛,很多人在博客中留下了評語。有些雖然只有短短的一句話,但也可以看出是對作者由衷的感謝。作為本書的策劃編輯,最初我也是在博客園中瀏覽博文時閱讀到這些文章的,我的直覺和網(wǎng)友們熱情洋溢的評語告訴我,這些文章有作為一部書出版的價值,于是我就聯(lián)系了程杰。幾個月后,我拿到了這部書的初稿。初審后,我發(fā)現(xiàn)書稿中存在一些問題。比如,當時書稿中還沒有對UML類圖進行講解的內(nèi)容,這會導致初學者學習后面的內(nèi)容時感到理解困難,于是我請作者在第1 章中增加了UML類圖這一節(jié),這是簡潔卻精彩的一節(jié);另外,當時作者為了便于表達某些舉例的含義,有相當數(shù)量的代碼都是用中文編寫的,雖然中文代碼看似易懂,但卻會令絕大多數(shù)早已熟悉了英文代碼的程序員們感到困惑和難以閱讀,所以我請作者把代碼改回為程序員們所熟悉的英文代碼,并同時添加了更詳細的中文注釋。經(jīng)過幾番認真和辛苦的修改與調整,現(xiàn)在,這本書在你的手中了。對于這本書,我想說的是,其中的很多篇章非常的精彩,會令你禁不住叫好,但也有一些篇章會顯得有些拖沓,或者是有些牽強,然而,隨著你讀過那些精彩的段落,讀過那些不那么精彩的段落,最終,你會讀到書的最后一頁(很多書不能使你做到這一點),當你讀完全書時,你會發(fā)現(xiàn),你的心情很愉快,很平靜,即使是那些當時看起來不那么精彩的段落,現(xiàn)在也都成為了這溫馨故事的一部分。你會記得書中那個好學、天真、而又執(zhí)著的小菜,也會記得那個善于啟發(fā),經(jīng)驗老道的大鳥。下面這些是來自作者博客的網(wǎng)友評論,看完這些熱情洋溢的評論,就和作者一起,進入設計模式的大話境界吧。本書策劃編輯 陳冰2007年10月18日網(wǎng)友評論daigua:看到這篇精彩的成長記,我連飯都不想吃了,什么事都不想做,就想把它看完。寫得太好了!是啊,現(xiàn)在很多教材都太枯燥了,不好理解。其實書的意義就在于讓人學到知識,而不在于用什么方式,為什么一定要那么教條呢,只要能讓人比較容易地學到書里的知識就是一本好書。謝謝你啊,給了我很大的信心。我現(xiàn)在很有信心把編程進行到底,哈哈。光頭小松鼠:絕對經(jīng)典!一篇小故事,把程序的靈活性、可擴展性、可維護、可復用等說得怎一個妙字了得!沉默天蝎:感激,讓我這個菜鳥頓悟。這樣的寫法太好了,如果老大你出書,我肯定購買!碳碳:這種學習的方式真的很神奇,盡管每個人都能想到,但不是每個人都能做到。或許可以把系列文章歸檔出書,說不定會收到追捧,呵呵。Bryant:真的是太棒了!我原來看過一些有關設計模式的書,都覺得太抽象,根本就不能理解,也不知道啥時候能用上??催^你寫的這些文章,才知道了應該怎樣在實際中運用這些模式,而且文筆非常的幽默,享受!Thx ^_^ 支持!有個建議,最好慢慢地把所有的設計模式都聊聊!Bryant:不錯,樓主說的非常幽默,通俗,把我們一步一步帶入面向對象的世界 thx ^_^Bryant:太棒了,我正是這樣初學設計模式的小菜,需要這樣的文章,謝謝樓主!菜鳥飛:樓主,加油,支持你。在這里獻上崇高的敬意,不管你有沒有感受到我摯熱的目光。請你相信,有這樣一些人一直在默默地關注著你,期待著你。wdx2008:非常好?。。∮哪?,搞笑,易懂,真神人也,鬼神不可測!支持樓主??!空明流轉:呵呵,樓主說得蠻好。國外的文章好就好在有例子,“廢話”多,所以比較好理解。至于行文風格嘛,這個倒是因人而異的。我個人就偏向于論文式的行文風格,邏輯嚴密,層層遞進,闡述也很清晰。就有點像有序數(shù)組,二分法就能輕松查找到自己想要的東西,但國內(nèi)的那種論文式的文章,呵呵,我看是賣弄的成分居多,實作的成分偏少,所以才那么難讀的吧。Char:現(xiàn)在的大學就缺少這種既通俗易懂,又有內(nèi)容的東西。Apple:不錯,學習了。希望博主能再接再厲多寫點,看了很多書都沒有看你的文章明白得快。SnowDoggie:呵呵,挺好的。其實要想找個絕對沒有漏洞的例子是很辛苦的,關鍵在于文章本身能說明問題,能體現(xiàn)作者的意圖就足夠了。昨天和朋友一起爬山的時候還討論了你的文章風格,其實最有用的還是你這種寓教于樂,步步深入的風格,陽春白雪的經(jīng)典雖然是經(jīng)典,大眾卻不見得喜歡。Jerry:不錯的文章,簡單明了,又不乏趣味,好的文章就得頂下。izhizhe2000:很好,整個系列寫完之后可以出書了,保證受大學生的廣泛歡迎!mekong:很是欣賞這樣幽默風趣又不失睿智深刻的文字。Wuyisky:呵呵,樓主不僅程序寫得好,而且還有文學天賦。佩服!Jack:真正的高手是用最生動的語言,最簡單的例子,這才是真正的“深入淺出”。贊?。?!老兄,加油,繼續(xù)喲。BoyLee:人才,愛死你了。做了一年外包,沒技術含量。正打算從頭學習這些東西,這樣的方式我最喜歡了。Leoxu:很不錯,對正在找工作的我有很大的幫助。以后會多來光顧。Ame:寫得承上啟下,始終有一主干線貫穿,作者的文字功底很強??!Artech:我很喜歡你的寫作風格!以一種調侃的方式講明一個深奧的問題。我一直在嘗試如何以一種讓每個人都懂得的語言來向大家分享我所理解的.NET。你給了我一個啟發(fā)。8:醍醐灌頂!感謝,領悟了不少東西?。?!Yufengly:真是太容易理解了,而且看后印象深刻,繼續(xù)努力!期待下文……支持作者!Sopper:支持,例子舉得很形象,寫得很棒,以后會常來關注。d:會技術的高人有很多,但能把技術講得如此通俗易懂的高人并不多,你是一個,謝謝~~~white.wu:非常喜歡您這種授人以“漁”的文章。Answer:強啊,本菜鳥受益很大,謝謝。Hanlei:強,很受益啊,感謝樓主,寫出這么好的文章來。金色海洋(jyk):繼續(xù)呀,我們期待中……,寫得很好,一看就懂。DSharp:看博客園這么久了,終于看到一篇有中國特色的好文。

內(nèi)容概要

本書通篇都是以情景對話的形式,用多個小故事或編程示例來組織講解GoF(設計模式的經(jīng)典名著——Design Patterns:Elements of Reusable Object-Oriented Software,中譯本名為《設計模式——可復用面向對象軟件的基礎》的四位作者Erich Gamma、Richard Helm、Ralph Johnson,以及John Vlissides,這四人常被稱為Gang of Four,即四人組,簡稱GoF)總結的23個設計模式。本書共分為29章。其中,第1、3、4、5章著重講解了面向對象的意義、好處以及幾個重要的設計原則;第2章,以及第6到第28章詳細講解了23個設計模式;第29章是對設計模式的全面總結。附錄部分是通過一個例子的演變?yōu)槌鯇W者介紹了面向對象的基本概念。本書的特色是通過小菜與大鳥的趣味問答,在講解程序的不斷重構和演變過程中,把設計模式的學習門檻降低,讓初學者可以更加容易地理解——為什么這樣設計才是好的?是怎樣想到這樣設計的?以達到不但授之以“魚”,還授之以“漁”的目的。引導讀者體會設計演變過程中蘊藏的大智慧。  本書適合編程初學者或希望在面向對象編程上有所提高的開發(fā)人員閱讀。

作者簡介

程杰,高級軟件工程師&高級培訓講師。從事軟件開發(fā)一線工作近八年時間。曾在申銀萬國證券公司、上海楊浦區(qū)政府、朝華集團下屬網(wǎng)游公司、香港晨興集團等多行業(yè)項目開發(fā)中擔任主程及項目負責人,有豐富的大中型軟件開發(fā)經(jīng)驗,以及多年的軟件設計與項目管理經(jīng)驗。曾任加拿大慧

書籍目錄

第1章  代碼無錯就是優(yōu)?——簡單工廠模式     1.1  面試受挫     1.2  初學者代碼毛病     1.3  代碼規(guī)范     1.4  面向對象編程     1.5  活字印刷,面向對象     1.6  面向對象的好處     1.7  復制vs.復用     1.8  業(yè)務的封裝    1.9  緊耦合vs.松耦合     1.10  簡單工廠模式     1.11  UML類圖    第2章  商場促銷——策略模式    2.1  商場收銀軟件     2.2  增加打折     2.3  簡單工廠實現(xiàn)     2.4  策略模式    2.5  策略模式實現(xiàn)     2.6  策略與簡單工廠結合     2.7  策略模式解析    第3章  拍攝UFO——單一職責原則     3.1  新手機     3.2  拍攝     3.3  沒用的東西     3.4  單一職責原則     3.5  方塊游戲的設計     3.6  手機職責過多嗎?    第4章  考研求職兩不誤——開放-封閉原則     4.1  考研失敗     4.2  開放-封閉原則     4.3  何時應對變化     4.4  兩手準備,并全力以赴    第5章  會修電腦不會修收音機?——依賴倒轉原則     5.1  MM請求修電腦     5.2  電話遙控修電腦     5.3  依賴倒轉原則     5.4  里氏代換原則     5.5  修收音機    第6章  穿什么有這么重要?——裝飾模式     6.1  穿什么有這么重要?     6.2  小菜扮靚第一版     6.3  小菜扮靚第二版     6.4  裝飾模式     6.5  小菜扮靚第三版     6.6  裝飾模式總結    第7章  為別人做嫁衣——代理模式     7.1  為別人做嫁衣!     7.2  沒有代理的代碼     7.3  只有代理的代碼     7.4  符合實際的代碼     7.5  代理模式     7.6  代理模式應用     7.7  秀才讓小六代其求婚    第8章  雷鋒依然在人間——工廠方法模式     8.1  再現(xiàn)活雷鋒     8.2  簡單工廠模式實現(xiàn)     8.3  工廠方法模式實現(xiàn)     8.4  簡單工廠vs.工廠方法     8.5  雷鋒工廠    第9章  簡歷復印——原型模式     9.1  夸張的簡歷     9.2  簡歷代碼初步實現(xiàn)     9.3  原型模式     9.4  簡歷的原型實現(xiàn)     9.5  淺復制與深復制     9.6  簡歷的深復制實現(xiàn)     9.7  復制簡歷vs.手寫求職信    第10章  考題抄錯會做也白搭——模板方法模式     10.1  選擇題不會做,蒙唄!     10.2  重復=易錯+難改     10.3  提煉代碼     10.4  模板方法模式     10.5  模板方法模式特點     10.6  主觀題,看你怎么蒙   第11章  無熟人難辦事?——迪米特法則     11.1  第一天上班     11.2  無熟人難辦事     11.3  迪米特法則    第12章  牛市股票還會虧錢?——外觀模式     12.1  牛市股票還會虧錢?     12.2  股民炒股代碼     12.3  投資基金代碼     12.4  外觀模式     12.5  何時使用外觀模式    第13章  好菜每回味不同——建造者模式     13.1  炒面沒放鹽     13.2  建造小人一     13.3  建造小人二     13.4  建造者模式     13.5  建造者模式解析     13.6  建造者模式基本代碼    第14章  老板回來,我不知道——觀察者模式     14.1  老板回來?我不知道!     14.2  雙向耦合的代碼     14.3  解耦實踐一     14.4  解耦實踐二     14.5  觀察者模式     14.6  觀察者模式特點     14.7  觀察者模式的不足     14.8  事件委托實現(xiàn)     14.9  事件委托說明     14.10  石守吉失手機后的委托    第15章  就不能不換DB嗎?——抽象工廠模式     15.1  就不能不換DB嗎?     15.2  最基本的數(shù)據(jù)訪問程序     15.3  用了工廠方法模式的數(shù)據(jù)訪問程序     15.4  用了抽象工廠模式的數(shù)據(jù)訪問程序     15.5  抽象工廠模式     15.6  抽象工廠模式的優(yōu)點與缺點     15.7  用簡單工廠來改進抽象工廠     15.8  用反射+抽象工廠的數(shù)據(jù)訪問程序     15.9  用反射+配置文件實現(xiàn)數(shù)據(jù)訪問程序     15.10  無癡迷,不成功    第16章  無盡加班何時休——狀態(tài)模式     16.1  加班,又是加班!     16.2  工作狀態(tài)-函數(shù)版     16.3  工作狀態(tài)-分類版     16.4  方法過長是壞味道     16.5  狀態(tài)模式     16.6  狀態(tài)模式好處與用處     16.7  工作狀態(tài)-狀態(tài)模式版    第17章  在NBA我需要翻譯——適配器模式     17.1  在NBA我需要翻譯!     17.2  適配器模式     17.3  何時使用適配器模式     17.4  籃球翻譯適配器     17.5  適配器模式的.NET應用     17.6  扁鵲的醫(yī)術    第18章  如果再回到從前——備忘錄模式     18.1  如果再給我一次機會……     18.2  游戲存進度     18.3  備忘錄模式     18.4  備忘錄模式基本代碼     18.5  游戲進度備忘    第19章  分公司=一部門——組合模式     19.1  分公司不就是一部門嗎?     19.2  組合模式     19.3  透明方式與安全方式     19.4  何時使用組合模式     19.5  公司管理系統(tǒng)     19.6  組合模式好處    第20章  想走?可以!先買票——迭代器模式     20.1  乘車買票,不管你是誰!     20.2  迭代器模式     20.3  迭代器實現(xiàn)     20.4  .NET的迭代器實現(xiàn)    20.5  迭代高手    第21章  有些類也需計劃生育——單例模式     21.1  類也需要計劃生育     21.2  判斷對象是否是null     21.3  生還是不生是自己的責任     21.4  單例模式     21.5  多線程時的單例     21.6  雙重鎖定     21.7  靜態(tài)初始化    第22章  手機軟件何時統(tǒng)一——橋接模式     22.1  憑什么你的游戲我不能玩     22.2  緊耦合的程序演化     22.3  合成/聚合復用原則     22.4  松耦合的程序     22.5  橋接模式     22.6  橋接模式基本代碼     22.7  我要開發(fā)“好”游戲    第23章  烤羊肉串引來的思考——命令模式     23.1  吃烤羊肉串!     23.2  燒烤攤vs.燒烤店     23.3  緊耦合設計     23.4  松耦合設計     23.5  松耦合后     23.6  命令模式     23.7  命令模式作用    第24章  加薪非要老總批?——職責鏈模式     24.1  老板,我要加薪!     24.2  加薪代碼初步     24.3  職責鏈模式     24.4  職責鏈的好處     24.5  加薪代碼重構     24.6  加薪成功    第25章  世界需要和平——中介者模式     25.1  世界需要和平!     25.2  中介者模式     25.3  安理會做中介     25.4  中介者模式優(yōu)缺點    第26章  項目多也別傻做——享元模式     26.1  項目多也別傻做!     26.2  享元模式     26.3  網(wǎng)站共享代碼     26.4  內(nèi)部狀態(tài)與外部狀態(tài)     26.5  享元模式應用    第27章  其實你不懂老板的心——解釋器模式     27.1  其實你不懂老板的心     27.2  解釋器模式     27.3  解釋器模式好處     27.4  音樂解釋器     27.5  音樂解釋器實現(xiàn)     27.6  料事如神    第28章  男人和女人——訪問者模式     28.1  男人和女人!     28.2  最簡單的編程實現(xiàn)     28.3  簡單的面向對象實現(xiàn)     28.4  用了模式的實現(xiàn)     28.5  訪問者模式     28.6  訪問者模式基本代碼     28.7  比上不足,比下有余    第29章  OOTV杯超級模式大賽——模式總結     29.1  演講任務     29.2  報名參賽     29.3  超模大賽開幕式     29.4  創(chuàng)建型模式比賽     29.5  結構型模式比賽     29.6  行為型模式一組比賽     29.7  行為型模式二組比賽     29.8  決賽     29.9  夢醒時分     29.10  沒有結束的結尾    附錄 A  培訓實習生——面向對象基礎     A.1  培訓實習生     A.2  類與實例     A.3  構造方法     A.4  方法重載     A.5  屬性與修飾符     A.6  封裝     A.7  繼承     A.8  多態(tài)     A.9  重構     A.10  抽象類     A.11  接口     A.12  集合     A.13  泛型     A.14  委托與事件     A.15  客套    附錄 B  參考文獻

章節(jié)摘錄

插圖:

媒體關注與評論

前言本書是一本程序集?NO。本書是一本故事集?NO。本書是一本通過故事講述程序如何設計的方法集。本書是給連Hello World都沒寫過的非程序員看的書嗎?NO。本書是給玩過穿孔紙帶(0/1)、寫過匯編、BASIC、C、C++、Delphi、Java、C#等語言,開發(fā)過覆蓋全球、使用人數(shù)過億、數(shù)百萬行代碼等大型系統(tǒng)的骨灰級程序員看的書嗎?NO。本書希望能給渴望了解OO世界的初學者、困惑于僵硬、脆弱、無法復用的代碼編程體驗者、一直打著OO編程的旗號,做著過程式開發(fā)的基于對象的編程實踐者一些好的建議和提示。本書起因寫本書源于我一次做培訓的經(jīng)歷,學生大多是計算機專業(yè)的學生或有過一定經(jīng)驗的在職開發(fā)者。他們都知道類、方法、構造方法、甚至抽象類、接口等概念,并用Visual Studio寫過不少的Windows或Web程序,可是當我提問為什么要用面向對象,它的好處在哪里時,卻沒有人能完整地講得出來,多數(shù)人的反應是,概念知道的,就是表達不清楚。針對于此,我就舉了中國古代的四大發(fā)明中活字印刷的例子(見第1章),通過一個虛構的三國曹操做詩的情景,把面向對象的幾大好處講解了一下,學生普遍都感覺通俗易懂,覺得這樣的教學比直接告訴面向對象有什么好處要更加容易理解和記憶。這就使得我不斷地思考這樣一個問題,學一門技術是否需要趣味性、通俗性的引導。我在思考中發(fā)現(xiàn),看小說時,一般情況下我都可以完整地讀完它,而閱讀技術方面的圖書,卻很少有真正的每章每頁的仔細閱讀。盡管這兩者是有很大區(qū)別,技術書中可能有不少知識是已經(jīng)學會或暫時用不上的內(nèi)容,但也不得不承認,小說之所以可以堅持讀完是因為對它感興趣,作者的文字吸引你。而有些技術書的枯燥乏味使得閱讀產(chǎn)生了困難,通常讀個前幾章就留待以后再說了。技術課的教學同樣如此,除非學生是抱著極大的學習動機來參與其中,否則照本宣科的教學、枯燥乏味的講解,學生一定會被龐雜的概念和復雜的邏輯攪暈了頭腦,致使效果大打折扣。也正因為此,往往造成部分學生,學了四年的計算機編程,卻可能連面向對象有什么好處都還說不清。為什么不可以讓技術書帶點趣味性呢,哪怕這些趣味性與所講的技術并不十分貼切,只要不是影響技術核心的本質,不產(chǎn)生重大的錯誤,讓讀者能輕松閱讀它,并且有了一定的了解和感悟,這要比一本書寫得高深無比,卻被長期束之高閣要好得多。也正是這個原因,本人開始了關于設計模式的趣味性寫作的嘗試。本書讀者顯然本書不是給無任何編程經(jīng)驗的人看的,對于想入這一行的朋友來說,找一門編程語言,從頭開始或許才是正道。而本書也不太適合有了多年面向對象開發(fā)經(jīng)驗,對常用的設計模式了如指掌的人看的。畢竟這里更多的是一些基礎性的東西。我時常拿程序員的成長與足球運動員的成長做對比。GoF的《設計模式》好比是世界頂級足球射門集錦,《重構》、《敏捷軟件開發(fā)》、《設計模式解析》好比是一場場最精彩的足球比賽。我為之瘋狂,為之著迷??墒俏也⒉恢皇窍胱鲆粋€球迷(軟件使用者),而是更希望自己能成為一個足球運動員(軟件設計編程者),能夠親自上場比賽,并且最終能成為球星(軟件架構師)。我仔細地閱讀這些被譽為經(jīng)典的著作,認真地實踐其中代碼,但是我總是半途而廢、堅持不下去,我痛恨自己意志力的薄弱、憎惡自己無端地放棄,難道我真的就是那么的笨?痛定思痛,反思悔過。我終于發(fā)現(xiàn),貝利、馬拉多納不管老、胖是用來敬仰的,貝克漢姆、羅納爾迪尼奧不管美、丑是用來欣賞的,但他們的球技……嗨,客氣地說,是不容易學會的,客觀地說,是不可能學得會的。為什么會這樣?原來,我學習中缺了一個很重要的環(huán)節(jié),我們在看到了精彩的球賽,欣賞球星高超球技的同時,卻忽略了球星的成長過程。他們盡管有一定天分,但卻也是從最底層通過努力一點一點慢慢顯露出來的,我們需要的不僅僅是世界杯上的那定乾坤的一腳,更需要這一腳之前是如何練出那種神奇的方法,對于程序員來講,精彩的代碼是如何想出來的,要比看到精彩的代碼更加令人期待。本書顯然不是培養(yǎng)足球明星(軟件架構師)的俱樂部,而是訓練足球基本功的學校,培訓的是初學足球的小球員(面向對象的程序員),本書希望的是讀者閱讀后可以打好面向對象的基礎,從而更加容易并深入的去理解和感受GoF的《設計模式》以及其他大師作品的魅力。本書定位本書是在學習眾多大師智慧結晶的圖書作品、分享了網(wǎng)上多位朋友的實踐經(jīng)驗的基礎上,加之自己的編程感受寫出來的。正如牛頓有句名言:“如果說我比別人看得更遠些,那是因為我站在了巨人的肩上?!钡@然,本書并沒有創(chuàng)造或發(fā)現(xiàn)什么模式,因此談不上站在巨人肩膀上看得更遠。所以作者更希望本書能成為一些準備攀登面向對象編程高峰的朋友的登山引路人、提攜者,在您登山途中迷路時給予指引,在您峭壁攀巖摔跤時給予保護。本書特色本書有兩個特色,第一特色是重視過程??戳颂嗟挠嬎銠C編程類的圖書,大多數(shù)書籍都是集中在講授優(yōu)秀的解決方案或者一個完美的程序樣例,但對這些解決方案和程序的演變過程卻重視不夠,好書之所以好,就是因為作者可以站在學習者的角度去講解問題所在,讓學習門檻降低?!吨貥嬇c模式》中有一句經(jīng)典之語:“如果想成為一名更優(yōu)秀的軟件設計師,了解優(yōu)秀軟件設計的演變過程比學習優(yōu)秀設計本身更有價值,因為設計的演變過程中蘊藏著大智慧?!北救司拖M芡ㄟ^小菜與大鳥的對話,在不斷地提問與回答過程中,在程序的不斷重構演變中,把設計模式的學習門檻降低,讓初學者可以更加容易地理解,為什么這樣設計才是好,是如何想到這樣設計的。本書的第二個特色就是貼近生活。盡管編程是嚴謹?shù)模蝗荽笤捄蛻蛘f。但生活卻是多姿多彩的,而設計模式也不是完全孤立于現(xiàn)實世界而憑空想出來的理論。事實上所有的模式都可以在生活中找到對應。因此,通過主人公小菜和大鳥的對話,將求職、面試、工作、交友、投資、兼職、辦公室文化、生活百味等等非常接近程序員生活原貌的場景寫到了書中,用一個個小故事來引出模式,會讓讀者相對輕松地進入學習設計模式的狀態(tài)。當然,此舉的最大目的還是為了深入淺出,而非純粹噱頭。本書內(nèi)容本書通篇都是以情景對話的形式,用一個又一個的小故事或編程示例來組織的。共分為四個部分。第一部分是面向對象的意義和好處以及幾個重要的設計原則,通過小菜面試的失敗引出;第二部分是詳細講解23個設計模式;第三部分是對設計模式的總結,利用小菜夢到的超級模式大賽的場景,把所有的面向對象和模式概念都擬人化來趣味性的總結設計模式之間的異同和關鍵點。第四部分是附錄,主要是針對對面向對象不熟悉讀者的一個補充,通過一個例子的演變介紹了類、封裝、繼承、多態(tài)、接口、事件等概念。本書人物及背景小菜:原名蔡遙,22歲,上海人,上海某大學計算機專業(yè)大學四年級學生,成績一般,考研剛結束,即將畢業(yè),正求職找工作。大鳥:原名李大遼,29歲,小菜的表哥,云南昆明人,畢業(yè)后長期從事軟件開發(fā)和管理工作,近期到上海發(fā)展,借住小菜家在寶山的空套房內(nèi)。小菜以向大鳥學習為由,也從市區(qū)父母家搬到寶山與大鳥同住。本書研讀方法本書建議按順序閱讀,如果您感覺由于面向對象知識的匱乏,例如對繼承、多態(tài)、接口、抽象類的理解不足,造成閱讀上的困難,不妨先閱讀附錄一的“培訓實習生——面向對象基礎”部分,然后再從第1章開始閱讀。如果您已經(jīng)對不少設計模式熟悉,也不妨挑選不熟悉的模式章節(jié)閱讀。 盡管本書中的代碼都提供下載,但不經(jīng)過讀者的自己手動輸入過程,其實閱讀的效果是大打折扣的。強烈建議讀者根據(jù)樣例自己寫程序,只有在運行出錯,達不到預期效果時再查看本書提供的源程序,這樣或許才是最好的學習方法。有問題可及時與我聯(lián)系。我的電子郵箱是chengjielong@163.com,博客是http://cj723.cnblogs.com/。本書中的很多精華都來自許多大師作品,建議讀者通過筆記形式記錄,這將有助于您的記憶和理解設計模式,增強最終的讀書效果。本書中出現(xiàn)的“[ ]”是表示句子摘自某書。例如,“策略模式(Strategy):它定義了算法家族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化不會影響到使用算法的客戶[DP]?!逼渲小癧DP]”表示此名摘自《設計模式:可復用面向對象軟件的基礎》,詳細摘要說明請參看附錄二。本書中29章中的虛擬人物姓名都是軟件編程中的專業(yè)術語,因此凡是專業(yè)術語被指向人物姓名的都用斜體字表示,以和實際術語區(qū)分。例如,“第一位是我們OOTV創(chuàng)始人,面向對象先生”,這里的斜體字面向對象指人名。關于本書學習的疑問解答看本書需要什么基礎?主要是C#或其他編程語言的基礎知識,如變量、分支判斷、循環(huán)、函數(shù)等編程基礎,關于面向對象基礎可參看本書的附錄一。設計模式是否有必要全部學一遍?答案是,Yes!別被那些說什么設計模式大多用不上,根本不用全學的輿論所左右。盡管現(xiàn)在設計模式遠遠不止23種,對所有都有研究是不太容易的,但就像作者本人一樣,在學習GoF總結的23個設計模式過程中,你會被那些編程大師們進行偉大的技術思想洗禮,不斷增加自己對面向對象的深入理解,從而更好的把這種思想發(fā)揚光大。這就如同高中時學立體幾何感覺沒用,但當你裝修好房子購買家俱時才知道,有空間感,懂得空間計算是如何的重要,你完全可能遇到買了一個大號的冰箱卻放不進廚房,或買了開關門的衣櫥(移門不占空間)卻因床在旁邊堵住了門而打不開的尷尬。重要的不是你將來會不會用到這些模式,而是通過這些模式讓你找到“封裝變化”、“對象間松散耦合”、“針對接口編程”的感覺,從而設計出易維護、易擴展、易復用、靈活性好的程序。成為詩人后可能不需要刻意地按照某種模式去創(chuàng)作,但成為詩人前他們一定是認真地研究過成百上千的唐詩宋詞、古今名句。如果說,數(shù)學是思維的體操,那設計模式,就是面向對象編程思維的體操。我學了設計模式后時常會過度設計,如何辦?作者建議,暫時現(xiàn)象,繼續(xù)努力。設計模式有四境界:1.沒學前是一點不懂,根本想不到用設計模式,設計的代碼很糟糕;2.學了幾個模式后,很開心,于是到處想著要用自己學過的模式,于是時常造成誤用模式而不     自知;3.學完全部模式時,感覺諸多模式極其相似,無法分清模式之間的差異,有困惑,但深知誤用之害,應用之時有所猶豫;4.靈活應用模式,甚至不應用具體的某種模式也能設計出非常優(yōu)秀的代碼,以達到無劍勝有劍的境界。從作者本人的觀點來說,不會用設計模式的人要遠遠超過過度使用設計模式的人,從這個角度講,因為怕過度設計而不用設計模式顯然是因噎廢食。當你認識到自己有過度使用模式的時候,那就證明你已意識到問題的存在,只有通過不斷的鉆研和努力,你才能突破“不識廬山真面目,只緣身在此山中”的瓶頸,達到“會當凌絕頂,一覽眾山小”的境界。編程語言的差異本書講的是面向對象設計模式,是用.NET中的C#語言編寫,但本書并不是主要講解C#語言或.NET框架的圖書,因此本書同樣適合Java、VB.NET、C++等其他一些面向對象語言的讀者閱讀來學習設計模式。就Java而言,主要差異來自C#對于子類繼承父類或實現(xiàn)接口用的都是“:”,而Java中兩者是有區(qū)別的。當Cat繼承抽象類Animal時,Java語法是public class Cat extends Animal當Superman實現(xiàn)接口IFly時,Java語法是public class Superman implements IFly然后Java中所有的方法都是虛擬的,因此不用指定new或是override修飾符。還有一些其他差異,但基本都不影響本書的閱讀。對于VB.NET的程序員,如果閱讀困難,不妨去網(wǎng)上查找關于轉換C#與VB.Net語言的工具,比如http://www.kamalpatel.net/ConvertCSharp2VB.aspx,將下載本書的源代碼轉換后再進行閱讀。C++的程序員,可能在語言上會有些差異,不過本書應該不會因為語言造成對面向對象思想的誤讀。不是一個人在戰(zhàn)斗首先要感謝我的妻子李秀芳對我寫作本書期間的全力支持,沒有她的理解和鼓勵,就不可能有本書的出版。而我們的寶寶也將在2008年初出生,希望等寶寶懂事后能知道,在寶寶的母親懷胎過程中,寶寶的父親也在為書的誕生而努力。也希望本書成為贈送給他或者她的最好的禮物。父母的養(yǎng)育才有作者本人的今天,本書的出版,尋根溯源,也是父母用心教育的結果。養(yǎng)育之恩,沒齒難忘。本書起源于本人在“博客園”網(wǎng)站的博客http://cj723.cnblogs.com/中的一個連載文章《小菜編程成長記》。沒想到連載引起了不小的反應,網(wǎng)友們普遍認為本人的這種技術寫作方式新穎、有趣、喜歡看。正是因為眾多網(wǎng)友的支持,本人有了要把GoF的23種設計模式全部成文的沖動。非常感謝這些在博客回復中鼓勵我的朋友。這里需要特別提及洪立人先生,他是本人在寫書期間共同為理想奮斗的戰(zhàn)友,寫作也得到了他的大力支持和幫助,我寫作的不少妙句也來自我們倆共同合作的網(wǎng)站http://www.miaoju.net。在此對兩位表示衷心的感謝。寫作過程中,本人參考了許多國內(nèi)外大師的設計模式的著作。尤其是《設計模式》(作者:簡稱GoF的Erich Gamm,Richard Helm,Ralph Johnson,John Vlissides)、《設計模式解析》(作者:Alan Shalloway,James R. Trott)、《敏捷軟件開發(fā):原則、模式與實踐》(作者:Robert C.Martin)、《重構——改善既有代碼的設計》(作者:Martin Fowler)、《重構與模式》(作者:Joshua Kerievsky)、《Java與模式》(作者:閻宏等等,沒有他們的貢獻,就沒有本書的出版。也希望本書能成為更好閱讀他們這些大師作品的前期讀物。寫作過程中,本人還參考了http://www.dofactory.com/ 關于23個設計模式的講解,并引用了他們的結構圖和基本代碼。在博客園中的許多朋友,比如張逸、呂震宇、李會軍、idior、Allen Lee的博文,MSDN SmartCast中李建忠的講座,CSDN博客中的大衛(wèi)、ai92的博文,網(wǎng)站J道www.jdon.com 的版主banq的文章都給本人的寫作提供了非常大的指引和幫助,在此表示感謝。另外博客園的雙魚座先生還對本人的部分代碼提出了整改意見,也表示衷心的謝意。詳細參考資料與網(wǎng)站鏈接,見附錄二。事實上,由于本人長期有看書記讀書筆記的習慣,所以書中引用筆記的內(nèi)容,也極有可能是來自某本書或者某個朋友的博客、某個網(wǎng)站的文章。而本人已經(jīng)無法一一說出其引用的地址,但這些作者的智慧同樣對本書的寫作帶來了幫助,在此只能說聲謝謝。最后,對本書的責任編輯陳冰先生及清華大學出版社的相關工作人員,表示由衷的感謝。本書的出版離不開陳先生的指導和其他工作人員的辛勤工作。程  杰   2007年7月序這本書最初起源于作者程杰在其博客中所寫的連載文章——《小菜編程成長記》。隨著文章的一篇篇發(fā)布,這些文章新穎的表現(xiàn)形式和獨特的風格受到了眾多讀者的關注和喜愛,很多人在博客中留下了評語。有些雖然只有短短的一句話,但也可以看出是對作者由衷的感謝。作為本書的策劃編輯,最初我也是在博客園中瀏覽博文時閱讀到這些文章的,我的直覺和網(wǎng)友們熱情洋溢的評語告訴我,這些文章有作為一部書出版的價值,于是我就聯(lián)系了程杰。幾個月后,我拿到了這部書的初稿。初審后,我發(fā)現(xiàn)書稿中存在一些問題。比如,當時書稿中還沒有對UML類圖進行講解的內(nèi)容,這會導致初學者學習后面的內(nèi)容時感到理解困難,于是我請作者在第1章中增加了UML類圖這一節(jié),這是簡潔卻精彩的一節(jié);另外,當時作者為了便于表達某些舉例的含義,有相當數(shù)量的代碼都是用中文編寫的,雖然中文代碼看似易懂,但卻會令絕大多數(shù)早已熟悉了英文代碼的程序員們感到困惑和難以閱讀,所以我請作者把代碼改回為程序員們所熟悉的英文代碼,并同時添加了更詳細的中文注釋。經(jīng)過幾番認真和辛苦的修改與調整,現(xiàn)在,這本書在你的手中了。對于這本書,我想說的是,其中的很多篇章非常的精彩,會令你禁不住叫好,但也有一些篇章會顯得有些拖沓,或者是有些牽強,然而,隨著你讀過那些精彩的段落,讀過那些不那么精彩的段落,最終,你會讀到書的最后一頁(很多書不能使你做到這一點),當你讀完全書時,你會發(fā)現(xiàn),你的心情很愉快,很平靜,即使是那些當時看起來不那么精彩的段落,現(xiàn)在也都成為了這溫馨故事的一部分。你會記得書中那個好學、天真、而又執(zhí)著的小菜,也會記得那個善于啟發(fā),經(jīng)驗老道的大鳥。下面這些是來自作者博客的網(wǎng)友評論,看完這些熱情洋溢的評論,就和作者一起,進入設計模式的大話境界吧。本書策劃編輯 陳冰2007年10月18日網(wǎng)友評論daigua:看到這篇精彩的成長記,我連飯都不想吃了,什么事都不想做,就想把它看完。寫得太好了!是啊,現(xiàn)在很多教材都太枯燥了,不好理解。其實書的意義就在于讓人學到知識,而不在于用什么方式,為什么一定要那么教條呢,只要能讓人比較容易地學到書里的知識就是一本好書。謝謝你啊,給了我很大的信心。我現(xiàn)在很有信心把編程進行到底,哈哈。光頭小松鼠:絕對經(jīng)典!一篇小故事,把程序的靈活性、可擴展性、可維護、可復用等說得怎一個妙字了得!沉默天蝎:感激,讓我這個菜鳥頓悟。這樣的寫法太好了,如果老大你出書,我肯定購買!碳碳:這種學習的方式真的很神奇,盡管每個人都能想到,但不是每個人都能做到?;蛟S可以把系列文章歸檔出書,說不定會收到追捧,呵呵。Bryant:真的是太棒了!我原來看過一些有關設計模式的書,都覺得太抽象,根本就不能理解,也不知道啥時候能用上。看過你寫的這些文章,才知道了應該怎樣在實際中運用這些模式,而且文筆非常的幽默,享受!Thx ^_^ 支持!有個建議,最好慢慢地把所有的設計模式都聊聊!Bryant:不錯,樓主說的非常幽默,通俗,把我們一步一步帶入面向對象的世界 thx ^_^Bryant:太棒了,我正是這樣初學設計模式的小菜,需要這樣的文章,謝謝樓主!菜鳥飛:樓主,加油,支持你。在這里獻上崇高的敬意,不管你有沒有感受到我摯熱的目光。請你相信,有這樣一些人一直在默默地關注著你,期待著你。wdx2008:非常好!??!幽默,搞笑,易懂,真神人也,鬼神不可測!支持樓主?。】彰髁鬓D:呵呵,樓主說得蠻好。國外的文章好就好在有例子,“廢話”多,所以比較好理解。至于行文風格嘛,這個倒是因人而異的。我個人就偏向于論文式的行文風格,邏輯嚴密,層層遞進,闡述也很清晰。就有點像有序數(shù)組,二分法就能輕松查找到自己想要的東西,但國內(nèi)的那種論文式的文章,呵呵,我看是賣弄的成分居多,實作的成分偏少,所以才那么難讀的吧。Char:現(xiàn)在的大學就缺少這種既通俗易懂,又有內(nèi)容的東西。Apple:不錯,學習了。希望博主能再接再厲多寫點,看了很多書都沒有看你的文章明白得快。SnowDoggie:呵呵,挺好的。其實要想找個絕對沒有漏洞的例子是很辛苦的,關鍵在于文章本身能說明問題,能體現(xiàn)作者的意圖就足夠了。昨天和朋友一起爬山的時候還討論了你的文章風格,其實最有用的還是你這種寓教于樂,步步深入的風格,陽春白雪的經(jīng)典雖然是經(jīng)典,大眾卻不見得喜歡。Jerry:不錯的文章,簡單明了,又不乏趣味,好的文章就得頂下。izhizhe2000:很好,整個系列寫完之后可以出書了,保證受大學生的廣泛歡迎!mekong:很是欣賞這樣幽默風趣又不失睿智深刻的文字。Wuyisky:呵呵,樓主不僅程序寫得好,而且還有文學天賦。佩服!Jack:真正的高手是用最生動的語言,最簡單的例子,這才是真正的“深入淺出”。贊!??!老兄,加油,繼續(xù)喲。BoyLee:人才,愛死你了。做了一年外包,沒技術含量。正打算從頭學習這些東西,這樣的方式我最喜歡了。Leoxu:很不錯,對正在找工作的我有很大的幫助。以后會多來光顧。Ame:寫得承上啟下,始終有一主干線貫穿,作者的文字功底很強啊!Artech:我很喜歡你的寫作風格!以一種調侃的方式講明一個深奧的問題。我一直在嘗試如何以一種讓每個人都懂得的語言來向大家分享我所理解的.NET。你給了我一個啟發(fā)。8:醍醐灌頂!感謝,領悟了不少東西?。?!Yufengly:真是太容易理解了,而且看后印象深刻,繼續(xù)努力!期待下文……支持作者!Sopper:支持,例子舉得很形象,寫得很棒,以后會常來關注。d:會技術的高人有很多,但能把技術講得如此通俗易懂的高人并不多,你是一個,謝謝~~~white.wu:非常喜歡您這種授人以“漁”的文章。Answer:強啊,本菜鳥受益很大,謝謝。Hanlei:強,很受益啊,感謝樓主,寫出這么好的文章來。金色海洋(jyk):繼續(xù)呀,我們期待中……,寫得很好,一看就懂。DSharp:看博客園這么久了,終于看到一篇有中國特色的好文。

編輯推薦

《大話設計模式》是準備攀登面向對象編程高峰朋友們的引路人和提攜者;《大話設計模式》是學習、體會和領悟了眾多大師智慧結晶后的圖書作品;《大話設計模式》是你深入理解和感受GoF的《設計模式》及其它大師作品的必備書籍;《大話設計模式》授之以“魚”,更授之以“漁”。感受設計演變過程中所蘊含的大智慧,體會樂與怒的程序人生中值得回味的一幕幕。設計模式的趣味解讀,面向對象的深入剖析。在詼諧與溫馨中做一次面向對象編程思維的體操。

圖書封面

圖書標簽Tags

評論、評分、閱讀與下載


    大話設計模式 PDF格式下載


用戶評論 (總計172條)

 
 

  •   類是對對象(屬性)的抽象,接口是對行為的抽象。對于任何一個OO程序員而言,設計模式即使不是最重要的,也是第二重要的。15年前,GOF的《Design Patterns:Elements of Reusable Object-Oriented Software》橫空出世,開創(chuàng)性的提出了23種設計模式,將OO帶入了一個嶄新的時代。自那之后,設計模式就成了OO世界的世界語,無論地域,無論種族,每個OO程序員都能和他人暢快溝通,而無需擔心有任何歧義。然而,要領悟各種設計模式的精髓,卻非一朝一夕的事,需要在實踐中千般錘百般煉?;氐匠探艿倪@本《大話設計模式》,可以說是GOF的白話文版,通過簡單有趣的例子,將23種模式一一解讀,對初學者而言,是一本不容錯過的好書。即使對有一定設計模式基礎的程序員而言,相信也一定有所裨益。以下摘錄一些書中精辟之言,以饗讀者。

    > 面向過程設計開發(fā)相對容易,但不容易應對變化;面向對象設計開發(fā)困難,但卻能更好的應對千變?nèi)f化的世界。
    > 封裝變化點是面向對象的一種很重要的思維方式。
    > 單一職責原則:就一個類而言,應該僅有一個引起它變化的原因。
    > 開放-封閉原則:對于擴展是開放的,對于更改是封閉的。
    > 類是對對象(屬性)的抽象,接口是對行為的抽象。
  •   這本書是對Gof4所著的《設計模式》的解讀,或者深入淺出的入門,設計模式是面向對象的圣經(jīng)之一,是讓面向對象的analysis和designing還有programming的思維凝合在一起的一種思想,總共有23個設計模式,在這本《大話設計模式》中,作者還羅列了編程過程中的一些常理性的規(guī)則,如單一功能原則,依賴倒置原則等,說真的,面向對象的菜鳥讀過這本書就會很快的成為高手,我是搞.net的,這本書適用于主流的java,c#,smalltalk等面向對象的語言,也就是說,設計模式講的面向對象的過程是拋開計算機底層,完全從高層分析設計的,在國內(nèi),理解設計模式精髓的人太稀少了,這本書對設計模式的解讀是透徹易懂。還有書中提到的兩本書,headfirst和《重構》也是程序員的必讀書。對于一個搞軟件的需要具備的不僅僅是語言,工具,還有專業(yè)認證,更需要把編程的方法溶為思想,不管是否閱讀過設計模式,這本書都應該看一看,很助于理解。再次為作者的智慧感到驚嘆!
  •   學了那么久的面向對象的語言了,對于我們據(jù)說的OO編程大家真的理解的嗎?看了本書后,才知道自己寫的程序有多么的糟糕~!根本就沒有什么面向對象可言!本書并沒有什么語法知識,但它能帶給你的是OO思想上的一次洗禮,用其中的模式可以編寫出易擴展和維護\復用性高,冗余低程序來,雖然很基礎,但就像我們唱歌,閉上眼睛,感覺唱得很好,但卻不知道歌曲中歌詞的含意,這就是看過和沒看過的區(qū)別.本書雖是從GOF過來的,但難得我們國家在這編程方面出來一本好書,所以我同樣力薦本書作為你進階的書籍中必看的一本!
  •   很早之前就買了一本GOF的《設計模式》,第一章看完,就沒有堅持繼續(xù)看下去,前段時間,看到同事的桌上擺了這本《大話設計模式》,隨手拿起來翻了翻,這一看不得了,愛不釋手了都,晚上回家,打開本本,第一件事情就是到當當買下它,周二下的訂單,周五就收到了,當當?shù)男蔬€是可以的。這本書寫的真的很不錯,不是隨便夸夸,而是其內(nèi)容安排和實例講解,加上對話式的行文,讓人讀起來像看小說一樣輕松,不知不覺就在小菜和大鳥的對話中,掌握了設計模式的精髓,常常為作者能想出這樣的故事式講述方法,拍案叫好。雖然讀起來輕松愉快,但是內(nèi)容一點也沒落下,對設計模式的講解不可謂不精彩,不可謂不深入,不可謂不透徹??傊痪湓?,一本國人的好書!
  •   故事很幽默,在幽默的故事中引出面向對象編程的原則和思想,真不知道作者是怎么想到的。不僅適宜初學者對設計模式展開第一次的親密接觸,也適用于老鳥們溫故而知新。
  •   可復用面向對象設計模式入門的首選,建議先看這本書,然后再看GoF的23種設計模式。
  •   學一點設計模式一定是受益非淺的,尤其是新手必讀。新手推薦的閱讀順序是這樣的,先從大話設計模式的附錄一:面向對象基礎看起。然后選擇一本結合編程語言的面向對象書籍,java和C++都非常的多,flex就可以直接看黑羽的殿堂之路。再然后就可以看這本《大話設計模式》了。再然后就可以看那本經(jīng)典的《深入淺出設計模式》了。這樣下來,新人就能成為老鳥了!
  •   以情景對話的形式,用多個小故事或編程示例來組織講解GoF總結的23個設計模式.
  •   在網(wǎng)上看了電子書一章后,才決定購買,真是介紹編程模式中的佳品!非常難得的好書。以前看那么多介紹面向對象編程方法的書都幾乎白費了,每次看都昏昏欲睡的,這書則不同,通過兩個程序員的簡單對話,非常有生活氣息,然后每個模式都有代碼示范,很快用模式編程與不用模式編程,就對比出孰優(yōu)孰劣了。要掌握本書,還得多多做練習,或在項目中使用這些方法,這樣進步最快。另外,要對當當提出批評,我的書前幾頁竟然像被人狠抓過一樣的皺,買這么多次書,這是頭一回的,真是莫名其妙,有幾頁還是撕裂了幾個口子,我只得用膠帶粘上。當當要注意員工的培訓啊,在你這兒買書,是給你們面子!不要再發(fā)生類似事件了。
  •   設計模式是每個面向對象編程的程序員都應掌握的,這本書總的來說語言簡單幽默,學習時也不讓人覺得枯燥
  •   以小菜在大鳥的幫助下從面向過程的初級程序員到熟知設計模式的公司程序員明星的故事講述23個設計模式。讀完本書基本可以通過一個設計模式想起書中的故事,然后通過故事想起該模式的類圖,基礎代碼,對初學者來說這是很重要的。
  •   書很不錯,循序漸進的啟發(fā),有力引導人以面向對象設計思想方式轉變。面向過程到面向對象最難的就是思想的轉變,本書中的講解從最開始的面向過程的思維,通過增加,需求,講究實際軟件中的問題,啟發(fā)讀者嘗試通過對程序進行面向對象的重構。
  •   這是面向對象編程當中的重要技巧:模式設計技術的超級入門書,我說超級的意思是超級的簡單,通俗易懂,能夠吸引人學下去,當然也有缺點:有些時候,為了追求通俗易懂,有些模式寫的簡單了一些,進度有點快。模式設計很難懂,要明白一個模式,我常常要花費半天(4小時)的功夫,過去看過一些這方面的書,都沒能讀完,這本書讀了一半,感覺還不錯。
  •   說實話,本書的意圖是向大家展示面向對象的思想是很接近生活實際的,面向對象的語言與以往的低級語言或者面向過程的語言不通,這種思想的基礎就是人類的自然思維,你怎么看待這個世界的資源配置、分工合作,就應該怎么去理解面向對象這種思想,有人說本書通俗易懂,那是因為作者懂得這個道理,其實大家都可以做到講面向對象的思想融入生活中去理解和看待一些事情,時間長了,在你面對一個設計問題的時候,就會很自然地運用面向對象的思想來解決問題,如果你懂得這個道理,并且堅持鍛煉自己,總有一天,你也能寫出本書這樣的文字來,而本書正是想你闡述這個問題,它不光是在對大家講述設計模式這個很小的方面,而是教會大家如何真正理解面向對象這個博大精深的思想。
  •   這本書通過簡單的“大話”方式,把設計模式這一軟件工程的核心課程娓娓道來,風格清新易懂,但讀者看這本書的前提應該是有面向對象語言的基礎,最好是C#
  •   建議已經(jīng)學習了面向對象,正準備提高自己的朋友閱讀此書,用很輕松的方式講解了設計模式的演化和使用場合。
  •   對于了解面向對象,又是設計模式初學者的人來說,本書是經(jīng)典教科書
  •   我是搞java的。真本書真的很適合設計模式的初學者,看完這本書不但是設計模式,面向對象的理解也會上一層樓。不錯!
  •   剛看了附錄A,用“動物運動會”的例子很形象的介紹了面向對象語言的相關基礎知識。同學推薦的設計模式入門書籍~~
  •   今天剛拿到手,迫不及待的翻看了第一章,感受頗深~
    雖然我是學嵌入式的,大多數(shù)是面向底層開發(fā)。但此書中的設計思想對任何從事程序開發(fā)的人都很有益處,尤其是在代碼的可維護性、靈活性、可復用性上講解的很深刻。而且語言詼諧幽默,讓人眼前一亮。。非常難得的一本書。。
  •   對于學習面向對象程序設計語言的人來說,這是本國內(nèi)不可多得的設計模式入門好書,文章風趣幽默,通俗易懂,當然這種書只看一遍是遠遠不夠的,要自己學著用代碼實現(xiàn),然后再與書上的代碼對照,這樣學習更有效果。當然學完這本可以繼續(xù)學習國外的《設計模式》那本圣經(jīng)
  •   這本書不僅適用于初學者來提高編程思維,而且對于軟件工作者學習設計模式,提高開發(fā)效率都很有幫助
  •   充滿理論而又不乏味,用豐富而幽默的故事來講解編程技術,這樣的書確實不多見,程杰老師能想到這么豐富的故事,足見其深厚的教學功底和對設計模式的透徹理解。我用了2個多星期慢慢地把這本書看完了,可以用四個字來形容,那就是“豁然開朗”。
  •   在書店看到這本書之后就把我迷住了,回去后就到當當上買下了。這是第一本我能讀懂的設計模式書籍。以前一時沖動買過一本GOF的《設計模式》,可惜本人水平太菜看不懂,只好束之高閣了。個人覺得比《大話設計模式》更符合中國人的口味。雖然現(xiàn)在早已不做這方面工作了,認為這是自己買的最好的計算機書籍之一。一直想送給我的朋友。
  •   如果你不懂什么叫設計模式,那么就買這本書掃盲吧!前提是要有扎實的面向對象的基礎!
  •   感覺這本書寫的很好,不懂設計模式,根本無法真正認識面向對象的感念
  •   看了前三章,作者的語言通俗易懂,講述的思路清晰,是一本學習設計模式的好書,讀者要是結合書中的講解,做一些編程練習,效果會更好。
  •   這書還是挺適合設計模式的初學者的,若要進階的話,恐怕還得閱讀其他的書籍了,如《深入淺出設計模式》和GOF的那本名著了
  •   深入淺出,讓人理解深刻。配合GOF的設計模式穿插閱讀,更有體會。
  •   設計模式的入門是學習設計模式的門檻之一,通常那些經(jīng)典的設計模式著作很難讓人理解,并且讀完它們需要極大的毅力與勇氣。此書卻能用相對容易接受的方式讓人迅速閱讀完這本書并對設計模式有了初步概念。對進一步深入學習設計模式的門檻降低了不少。雖然書中有些例子俺覺得相當?shù)拿銖姟?/li>
  •   無論作者如何寫, 設計模式都適合一定編程經(jīng)驗的人看的 比wof gang的容易理解多了, 很不錯的設計模式的書 很滿意
  •   通俗易懂,而且讓你徹底了解面向對象,徹底掌握面向對象的設計。華為,中興,騰訊,金蝶,如果你要面試開發(fā)或設計的崗位,又是高級語言,建議必看此書,因為這四家公司我都面試了,O(∩_∩)O~
  •   雖然我的工作經(jīng)驗有好幾年了,但是真正用到設計模式的項目基本為零。設計模式方面的技術書籍普遍枯燥乏味,很難堅持看下去,所以把設計模式應用到項目中也是空談。這本書用通俗幽默的場景和語言描述設計模式,能使閱讀者真正理解設計模式的精髓。希望看完這本書以后,能像作者描述的那樣,去讀《設計模式》的時候能醍醐灌頂,也希望我在閱讀完以后能真正寫出可維護、可復用、可擴展、靈活性好的代碼。
  •   之前沒有學習過設計模式,讀了這本書后對23個常用模式有了概念上的了解,但要用好,很有很長的路要走。各人覺得這本書比較適合初學者,因為授課過程輕松詼諧,比起各種經(jīng)典來說要的門檻低。
  •   這本書寫的是一個人學習面向對象的過程。故事與技術相結合。。很有創(chuàng)意。。??戳舜藭蟾杏X自己寫的代碼太爛了。。完全沒有復用性,可擴展性,維護性和靈活性。。。書中的故事情節(jié)通俗易懂。。貼近生活。。小菜犯的錯也是自己在學習中經(jīng)常犯的錯誤。。。作者使讀者很清析認識到自己經(jīng)常會犯的錯誤。。并給以糾正。。。。這是一本好書。。很值得一看。。。所以我把這本書當作生日禮物送給朋友。。。。。。
  •   用輕松詼諧的風格講解設計模式這樣的題材,難能可貴,看得出來作者是一個愛學習的人,書中經(jīng)常出現(xiàn)其他老外經(jīng)典書籍的語錄,雖然有些地方比喻得比較牽強,但為了支持國貨,我給打滿分~另外結尾一篇ootv大賽非常精彩,是全書最出色的部分,就這部分而言,不遜于任何外國“名著”
  •   用詼諧的語言介紹了Gof的23種設計模式。不過內(nèi)容略簡單。
  •   這本書太好了,每個例子都通俗易懂,把23中設計模式以對話的形式給大家講解,非常容易理解。
  •   此書適合有一定編程知識和對設計模式感興趣的初學者
  •   花了幾天時間把這本書讀了一遍,感覺對我這種初學設計模式的人是非常有幫助的。加深了我對面向對象的理解,而且書寫的非常有趣,沒有枯燥的感覺。還有就是對我自己來說應該對看幾遍。
  •   這是我第一次買和設計模式相關的書,這本書比較淺顯易懂,適合有一定編程經(jīng)驗,想學習OO編程的程序員。
  •     書中,以幾個角色之間的對話和交流,用互動的形式來對設計模式進行講解,很形象,很透徹,也很清晰易懂,很適合初學者來看。
  •   把復雜的東西寫得淺顯易動懂,讀了這本書,對面向對象和設計模式有較深的了解,適合一直想研究設計模式,卻無從下手的朋友~~
  •   通過各種生活中的實例講解各個設計模式,通俗易懂,對設計模式有很好的理解,很適合初學者。
  •   我覺得這本書寫得相當有趣味,一個個小故事和設計模式之前的共性讓作者的行文生動出色,讀完后對設計模式有了很深的認識,接下來,我會再讀一遍,然后動手重構自己的程序。
  •   書沒得說啊,本人還是剛畢業(yè)的學生(非計算機專業(yè)),之前對設計模式理解不深入,平時學習常用的也就工廠和單例,但是隨著幾個月工作接觸工作的方方面面,越發(fā)地覺的設計模式的重要性,與其說是設計模式還不如說的思考模式,思維最重要,而大話這本書,正是從工思維這個層面入手的,所以看著很有感覺,多謝作者給我們菜鳥們提供了這樣一本好書
  •   給國內(nèi)技術書這么高的評價在我印象中是很少的,但這本絕對值得,專門為同事們買的,雖然實際項目中用到的設計模式很少,但這絕對是提高過程中必經(jīng)的一條路,以前看過PDF版,也看過同事的私人買的書,這次買書一起批量買下,算是補上本好書在公司圖書里
  •   對想學習面向對象的模式的人來說,值得一看!
  •   大話設計模式這本書確實很新穎,暫且不討論書的結構問題,單從形式上來說可以算是一種創(chuàng)新,摒棄了傳統(tǒng)書籍的一味講解理論的風格,該書更加生動形象地對設計模式進行講解,可見作者對設計模式理解之獨到。
  •   書很好,書的紙張質量也很好。寫程序1年多來,這是我第一次接觸設計作者寫得很棒,每個模式確實通俗易懂偏偏通俗了,又少了點深度?;蛟S我該感謝這本書,因為我準備買下《設計模式》,《重構》,《重構與模式》,《設計模式解析》等書籍再進一步深入。
  •   設計模式的書看過一些了,從最早的“四人幫”的設計模式,到最新的Headfirst設計模式。這本書非常適于初學者和有一定coding經(jīng)驗積累的人,實戰(zhàn)性很強,而且行文比較輕松愉快,使人在愉快的閱讀和練習中掌握設計模式。極力推薦想學習”設計模式“的人選購,呵呵
  •   想學設計模式的有福氣咯而且里面有對面向對象特性的趣味解釋
  •   淺顯易懂,對設計模式初學者很有好處,里面的示例程序采用c#語言。
  •   以前看過一些類似的設計模式的書,也許是我能力不夠,看了半天不知道說什么。這本書通俗易懂,對于想入門設計模式的人非常合適,建議看完這本書在去看一些比較深的設計模式的書籍。對我來說這本書就是帶我走進設,計模式的神作了,由淺入深這本很合適,我很推薦。不好的地方就是例子講的比較簡單了,但是對初學者來說,簡單易懂才是最重要的。提醒下大家,電腦的書籍我不推薦在當當上買,比**貴很多,以前當當都是打75折,也許現(xiàn)在發(fā)展好了比較牛了,基本上電腦的書都打8折了,我也是最近才發(fā)現(xiàn)的,發(fā)現(xiàn)虧了很多。所以電腦類別的書我還是推薦去別的地方買~
  •   現(xiàn)在剛開始看的是后面的附錄A面向對象基礎。。因為面向對象還不是很熟悉,所以是從附錄開始看的。是在書城看到這本書的,這本書的封面標題在那一堆的枯燥的顏色的編程書里顯得特別顯眼,乍看之下以為是誰放錯了一本笑話書,好奇之余翻閱了一下,一下子就喜歡上了。很少有編程書讓人有一直看下去的欲望。果斷回家上網(wǎng)買書。
  •   本書很適合設計模式初學者,通過生活方式,以故意的形式吸引讀者目光,讓其有興趣更好的讀下去,改變了技術書籍一直以來沉悶的講知識點的模式。。。
  •   拿到嶄新的《大話設計模式》讓我很開心,書送來時保護得很好,沒有磨損現(xiàn)象,第一印象很不錯了。睡覺前躺在床上翻開書,一股墨香就鋪面而來。翻了一兩頁,細細地品味了一下書中詼諧幽默的字句。字里行間流露出作者的睿智。都說將很深奧的問題講得小孩都能聽懂的才是大師。這本書就有著如此的特點。很喜歡。
  •   很通俗的一本書特別適合設計模式入門的人看?;镜睦雍芎?,每種設計模式總結的原則和優(yōu)點精辟準確。我結合深入淺出設計模式在看。用這本書方便我的理解,用深入淺出設計模式做更高的提高。
  •   學校開設的設計模式課程很枯燥,無奈值得自己尋覓教材...在同學書架上發(fā)現(xiàn)了這本書,簡單翻了兩頁,便直接強行借走......所有的設計模式都是一個小故事,同時也穿插了幾個重要的設計原則,非常簡單易懂,每個小單元的例子都很好上手,看書的同時最好敲一敲代碼。但是個人感覺作為學習非常適合,但作為工具書似乎欠妥...
  •   這樣的書比較難得,可以把面向對象里面的深奧模式,像講故事一樣生動的表述出來。我邊看邊笑 這就叫學習的樂趣了吧
  •   這本書已經(jīng)看了第八章,從一個個生活場景中引入設計模式的概念,讓人難忘!
  •   找了許久有關設計模式方面的,曾經(jīng)有段時間看過head frist的電子書但是都沒有看這本書這樣幽默詼諧振奮人心。偶是剛學設計模式的菜鳥,這本書幽默的表達方式,深刻的講解讓我們這些菜鳥十分受益。我很多同學都買了這本書,而且他們都一致認為這本書是看看過的最有意思的專業(yè)方面的書籍。太感謝作者了,您要是再出書我還得買~~~
  •   這本書通俗易懂的闡述了設計模式的應用,不過讀者應該在讀書的過程中結合到自己的實際項目中去設計改進,加深對設計模式的理解
  •   適合設計模式入門的初學者研讀,技術要點融匯在詼諧幽默的小說當中,是我讀過的最輕松的技術類書籍,支持作者。博客園的朋友。
  •   起初我從網(wǎng)上最先閱讀到其中一個章節(jié),就被深深的吸引了。后來買到書后認真的閱讀,覺得真的是收益匪淺,比我之前買的設計模式類的書籍更容易閱讀,更容易理解。更難能可貴的是,它還會吸引你去讀。這里我向所有想學習設計模式的人推薦這本書。另外我也有一個建議,建議讀者把這本書翻譯成英文的,讓外國人也能享受到這么好的技術書籍。同時也能為中國程序員爭爭臉面(因為好多權威書籍都是國外出版的)。
  •   如果你在自學c#或是面向對象的編程語言,那這本書絕對是摸索中的燈塔,黑夜中的指路燈!看完書再寫代碼,你就會感覺到游擊隊和正規(guī)軍的戰(zhàn)斗力差距有多么大?。∠蜃髡咧戮矗。?!
  •   這本書深入淺出地講述了模式設計的各種方法和技巧, 以趣味對話的方式讓讀者在感受樂趣的同時深刻理解模式設計的各種優(yōu)秀的設計理念, 我很喜歡
  •   非常不錯的設計模式教材,采用C#作為基礎語言,同時采用日常對話的方式進行講解,雖然有些比喻不甚準確,但是起到了很好的作用,讀書的時候充分調動了讀者的積極性。不足就是書有點大,字有點大,如果做得小一些,有助于在更多的場合閱讀
  •   我沒有學過設計模式。不過看這本書發(fā)現(xiàn)編程的世界還是這么的有趣。越來越愛不釋手。

    因為寫這個評論。我打翻了水杯。半杯水灑在桌面上。唉。
  •   08年底讀到此書,很久沒有閱讀的驚喜,這本書一下幫我理解了學習設計模式的實際意義,很多不理解的概念一下貫通了,難得的好書.希望能讀到作者的其它作品.
  •   這本書寫的比較淺顯易懂,還有一本那個四個外國人寫的設計模式很好很強大,但是初學者好像不是很好懂,還是先看看這本書。有了全面的了解,在看那邊設計模式,基本上就搞明白了。
    還有一點,不要迷信那二十來種設計模式,那只是教程。實際應用種是活學活用的
  •   很好的設計模式入門書,詮釋了編程不僅僅是技術還是藝術
  •   這個數(shù)對于學設計模式的人來說比較適合入門,講的例子也比較貼近實際,通俗易懂,語言比較平實,不足之處在于有些例子還是比較牽強,希望作者再精雕細磨一下,使本書能更上一層樓,成為經(jīng)典中的經(jīng)典
  •   這本設計模式的書很適合初學者去研究與學習的過成。幽默詼諧,淺顯易懂。希望能夠很大家一起分享。
  •   有一定的理論和實踐基礎以后,這本書很有幫助:
    1、擴展自己的知識面,加之書中實例,將自己從一個編碼人員向設計的方向牽引,并提供這個里面必要的、科學的、實用的相關輔助工具;
    2、逆向解析,從實例出發(fā),再來闡述原因、理由,最終貫穿設計人員的思想以及思維模式,對于剛接觸這個行業(yè)以及入門不久者是很不錯的指引;
    3、系統(tǒng)性很強,逐步深入,而不是向我們常見的課本,每個知識點是孤立的,起碼給我展示的是一個全貌。
    感覺接觸太晚,現(xiàn)在已經(jīng)轉行,但是讀到其中的內(nèi)容,特別是思維模式和工具,對我現(xiàn)在分析一些問題,還是有一些啟示。
  •   一本基礎的入門的設計模式的書籍,情景對話的講解,通俗易懂
  •   此書對面向對象設計模式詮釋的很到位
  •   非常適合想要學習設計模式的初學者或有經(jīng)驗的人
  •   設計模式,是解決一些問題的固定模式,對于編程人員來說,讀讀受益匪淺
  •   買這本書的時候我也是帶著忐忑的心去買的,因為怕不適合我,但是我拿到書之后就開始瀏覽一下,結果它讓我愛不釋手。真的寫的太生動、太好了!以講故事的形式及各種生動的比喻講解了設計模式,很不錯,看來我的選擇是對的!我只想對作者說你丫太厲害了
  •   本書是基于C#編寫的,閱讀時并不需要讀者有較高的程度設計與C#語言基礎,是非常適合初學者的一本書,能夠使讀者獲得C#與設計模式的基礎知識,在輕松幽默與實踐中學到非常實用的知識!
  •   之前在書店中偶然看到這本書便隨手拿來閱讀,不料一讀起來就愛不釋手,不舍得放下,后來索性就在網(wǎng)上買一本。真的很不錯,讀起來輕松詼諧幽默,生動,很容易理解,特別適合想了解設計模式的限售
  •   本人生性較懶,買書從不寫評論,今天破例。這真是一本好書,生動有趣,通俗易懂。特別合適有了一定基礎想提高面向對象編程的程序員。
  •   看了N本講設計模式的書,看了之后都是似懂非懂,而這一本讓我徹底搞懂了設計模式,絕對是一本好書。
    早知道這本書的話就不用繞這么大一個圈子去學習設計模式了。
    此書用很淺顯的生活例子來講解設計模式,語言生動幽默,看后印象深刻。
    值得推薦!
  •   很好懂,很生動。對于面向對象的編程思想有很好的理解。
  •   設計模式都是看了當時會,過后就基本上忘掉了。這本書用生動的小例子給我們講解了設計模式,很好很好!!
  •   對于真正需要在軟件設計上入門的所有同學,都建議去讀一讀這本書幽默詼諧的筆觸,一個個生動的故事,引領我們進入設計模式的大門你真的需要這么一本書
  •   這本書對初學者來說真的是好書,很容易懂,很容易上手,說明作者對設計模式的思考很多
  •   這本書我已看一半,總體來說很不錯,很適合像我這種剛接觸設計模式的初級玩家,不足之處是沒有對設計模式的應用有更詳細的講解,看完書只能停留在看懂、理解,在運用方面還是不能拿捏,不過此書我還是很喜歡的,引領我走進了設計模式的殿堂。
  •   通過對話的方式來解析很多術語,讓初學者感到無鴨梨。也舉一些公司上班模式時程序員所要做的事件更能讓人知道以后編程員是做什么類型的工作性質的
  •   從《小菜成長記》到《大話設計模式》一直關注學習著, 以非常淺顯的語言講明白了設計模式。不管是系統(tǒng)學習或是想隨便翻翻,都是非常值得的。
  •   文章里面描述了很多設計模式,雖然我不是學JAVA的,但是通過本書幽默生動的實例講解,我也會很容易明白和記住各種不同的設計思想和設計模式。的確是一本與眾不同的書,相比那些大家、專家寫的書更讓人通俗易懂。
  •   大話設計模式,是一本相對趣味的一本書籍。
    個人覺得要有一定的基礎才購買本書。
  •   用很通俗的語言講解了深奧的設計模式,非常容易理解,尤其適合剛接觸設計模式的人
  •   沒得說了,真絕了!用簡單的故事或示例把抽象的設計模式理論表述的通俗易懂。我想作者一定有著豐富的開發(fā)和運用經(jīng)驗,才能把設計模式表達的這么清晰透徹。
  •   先要說一下文章的寫作模式,以小說似的調侃帶出一個個案例和設計模式。很生動,顯得不那么枯燥。在同類別書中,的確是獨具特色,看得出作者是用心在寫書,不像有的書抄來抄去的。
    內(nèi)容也寫的很通俗易懂,所以說是科普式的讀物。
    總而言之,一本難得的好書,學習計算機開發(fā)的人必讀。
  •   這本書通過實際生活中的例子,闡述了設計模式的應用場景,是一本不錯的書籍,值得一看
  •   本書以白話故事方式講解的各種設計模式,已經(jīng)買過了,這次幫朋友買的。
  •   趣味中學習到設計模式的美妙,比讀經(jīng)典模式書籍更有收獲!
  •   以對話形式,來談論設計模式,指出程序開發(fā)時的不足。
 

250萬本中文圖書簡介、評論、評分,PDF格式免費下載。 第一圖書網(wǎng) 手機版

京ICP備13047387號-7