設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)(典藏版)
定 價(jià):79 元
叢書名:計(jì)算機(jī)科學(xué)叢書
- 作者:[美] 埃里克·伽瑪(Erich Gamma)等
- 出版時(shí)間:2019/6/1
- ISBN:9787111618331
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312.8
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書結(jié)合設(shè)計(jì)實(shí)例從面向?qū)ο蟮脑O(shè)計(jì)中精選出23個(gè)設(shè)計(jì)模式, 總結(jié)了面向?qū)ο笤O(shè)計(jì)中*有價(jià)值的經(jīng)驗(yàn), 并且用簡(jiǎn)潔可復(fù)用的形式表達(dá)出來。本書分類描述了一組設(shè)計(jì)良好、 表達(dá)清楚的軟件設(shè)計(jì)模式, 這些模式在實(shí)用環(huán)境下特別有用。 本書適合大學(xué)計(jì)算機(jī)專業(yè)的學(xué)生、研究生及相關(guān)人員參考。
本書并不是一本介紹面向?qū)ο蠹夹g(shù)或設(shè)計(jì)的書,目前已有不少好書介紹面向?qū)ο蠹夹g(shù)或設(shè)計(jì)。本書假設(shè)你至少已經(jīng)比較熟悉一種面向?qū)ο缶幊陶Z言,并且有一定的面向?qū)ο笤O(shè)計(jì)經(jīng)驗(yàn)。當(dāng)我們提及“類型”和“多態(tài)”,或“接口”繼承與“實(shí)現(xiàn)”繼承的關(guān)系時(shí),你應(yīng)該對(duì)這些概念了然于胸,而不是迫不及待地翻閱手頭的字典。
另外,這也不是一篇高級(jí)專題技術(shù)論文,而是一本關(guān)于設(shè)計(jì)模式的書,它描述了在面向?qū)ο筌浖O(shè)計(jì)過程中針對(duì)特定問題的簡(jiǎn)潔而優(yōu)雅的解決方案。設(shè)計(jì)模式捕獲了隨時(shí)間進(jìn)化與發(fā)展的問題的求解方法,因此它們并不是人們從一開始就采用的設(shè)計(jì)方案。它們反映了不為人知的重新設(shè)計(jì)和重新編碼的成果,而這些都來自軟件開發(fā)者為了設(shè)計(jì)出靈活、可復(fù)用的軟件而長時(shí)間進(jìn)行的艱苦努力。設(shè)計(jì)模式捕獲了這些解決方案,并用簡(jiǎn)潔易用的方式表達(dá)出來。
設(shè)計(jì)模式并不要求使用獨(dú)特的語言特性,也不采用那些足以使你的朋友或老板大吃一驚的神奇的編程技巧。所有的模式均可以用標(biāo)準(zhǔn)的面向?qū)ο笳Z言實(shí)現(xiàn),這也許有時(shí)會(huì)比特殊的解法多費(fèi)一些功夫,但是為了增加軟件的靈活性和可復(fù)用性,多做些工作是值得的。
一旦理解了設(shè)計(jì)模式并且有了一種“Aha!”(而不是“Huh?”)的應(yīng)用經(jīng)驗(yàn)和體驗(yàn)后,你將用一種非同尋常的方式思考面向?qū)ο笤O(shè)計(jì)。你將擁有一種深刻的洞察力,以幫助你設(shè)計(jì)出更加靈活的、模塊化的、可復(fù)用的和易理解的軟件—這也是你著迷于面向?qū)ο蠹夹g(shù)的原因,不是嗎?
當(dāng)然還有一些提示和鼓勵(lì):第一次閱讀此書時(shí)你可能不會(huì)完全理解它,但不必著急,我們?cè)谄鸪蹙帉戇@本書時(shí)也沒有完全理解它們!請(qǐng)記住,這不是一本讀完一遍就可以束之高閣的書。我們希望你在軟件設(shè)計(jì)過程中反復(fù)參閱此書,以獲取設(shè)計(jì)靈感。
我們并不認(rèn)為這組設(shè)計(jì)模式是完整的和一成不變的,它只是我們目前對(duì)設(shè)計(jì)的思考的記錄。因此我們歡迎廣大讀者的批評(píng)與指正,無論從書中采用的實(shí)例、參考,還是我們遺漏的已知應(yīng)用,或應(yīng)該包含的設(shè)計(jì)模式等方面。你可以通過Addison-Wesley寫信給我們,或發(fā)送電子郵件到design-patterns@cs.uiuc.edu。你還可以發(fā)送郵件“send design pattern source”到design-patterns-source@cs.uiuc.edu獲取書中的示例代碼部分的源代碼。
另外我們有一個(gè)專門的網(wǎng)頁報(bào)道最新的消息與更新:
http://st-www.cs.uiuc.edu/users/patterns/DPBook/DPBook.html
E. G. 于加州Mountain View
R. H. 于蒙特利爾
R. J. 于伊利諾伊Urbana
J. V. 于紐約 Hawthorne
1994年8月
埃里克·伽瑪(Erich Gamma) 在瑞士蘇黎世大學(xué)獲得計(jì)算機(jī)科學(xué)博士學(xué)位。他與Kent Beck合作開發(fā)了單元測(cè)試框架JUnit,并領(lǐng)導(dǎo)了Eclipse Java Development Tools項(xiàng)目。他還曾是IBM Rational Jazz項(xiàng)目的主要成員。2011年,Gamma以杰出工程師(Distinguished Engineer)的身份加入微軟Visual Studio團(tuán)隊(duì),領(lǐng)導(dǎo)微軟位于瑞士蘇黎世的實(shí)驗(yàn)室。
理查德·赫爾姆(Richard Helm) 在澳大利亞墨爾本大學(xué)獲得計(jì)算機(jī)科學(xué)博士學(xué)位,曾在IBM T. J. Watson擔(dān)任研究員,并在澳大利亞開創(chuàng)了IBM面向?qū)ο蠹夹g(shù)研究分部。
拉爾夫·約翰遜(Ralph Johnson) 在美國康奈爾大學(xué)獲得計(jì)算機(jī)科學(xué)博士學(xué)位,伊利諾伊大學(xué)教授,在模式、重構(gòu)等領(lǐng)域均有很高造詣。
約翰·威利斯迪斯(John Vlissides) 在美國斯坦福大學(xué)獲得計(jì)算機(jī)科學(xué)博士學(xué)位,是IBM T. J. Watson研究中心的研究員。
出版者的話
贊譽(yù)
序言
前言
讀者指南
第1章引言┊1
1.1 什么是設(shè)計(jì)模式┊3
1.2 Smalltalk MVC中的設(shè)計(jì)模式┊4
1.3 描述設(shè)計(jì)模式┊6
1.4 設(shè)計(jì)模式的編目┊7
1.5 組織編目┊8
1.6 設(shè)計(jì)模式怎樣解決設(shè)計(jì)問題┊10
1.6.1 尋找合適的對(duì)象┊10
1.6.2 決定對(duì)象的粒度┊11
1.6.3 指定對(duì)象接口┊11
1.6.4 描述對(duì)象的實(shí)現(xiàn)┊12
1.6.5 運(yùn)用復(fù)用機(jī)制┊15
1.6.6 關(guān)聯(lián)運(yùn)行時(shí)和編譯時(shí)的結(jié)構(gòu)┊18
1.6.7 設(shè)計(jì)應(yīng)支持變化┊19
1.7 怎樣選擇設(shè)計(jì)模式┊22
1.8 怎樣使用設(shè)計(jì)模式┊24
第2章實(shí)例研究:設(shè)計(jì)一個(gè)文檔編輯器┊25
2.1 設(shè)計(jì)問題┊27
2.2 文檔結(jié)構(gòu)┊27
2.2.1 遞歸組合┊28
2.2.2 圖元┊29
2.2.3 組合模式┊31
2.3 格式化┊31
2.3.1 封裝格式化算法┊31
2.3.2 Compositor和Composition┊32
2.3.3 策略模式┊33
2.4 修飾用戶界面┊34
2.4.1 透明圍欄┊34
2.4.2 Monoglyph┊35
2.4.3 Decorator模式┊36
2.5 支持多種視感標(biāo)準(zhǔn)┊37
2.5.1 對(duì)象創(chuàng)建的抽象┊37
2.5.2 工廠類和產(chǎn)品類┊38
2.5.3 Abstract Factory 模式┊40
2.6 支持多種窗口系統(tǒng)┊40
2.6.1 是否可以使用Abstract Factory模式┊40
2.6.2 封裝實(shí)現(xiàn)依賴關(guān)系┊41
2.6.3 Window和WindowImp┊43
2.6.4 Bridge模式┊46
2.7 用戶操作┊46
2.7.1 封裝一個(gè)請(qǐng)求┊47
2.7.2 Command類及其子類┊47
2.7.3 撤銷和重做┊48
2.7.4 命令歷史記錄┊49
2.7.5 Command模式┊50
2.8 拼寫檢查和斷字處理┊50
2.8.1 訪問分散的信息┊51
2.8.2 封裝訪問和遍歷┊51
2.8.3 Iterator類及其子類┊52
2.8.4 Iterator模式┊55
2.8.5 遍歷和遍歷過程中的動(dòng)作┊55
2.8.6 封裝分析┊56
2.8.7 Visitor類及其子類┊59
2.8.8 Visitor模式┊60
2.9 小結(jié)┊60
第3章創(chuàng)建型模式┊62
3.1 Abstract Factory(抽象工廠)—對(duì)象創(chuàng)建型模式┊66
3.2 Builder(生成器)—對(duì)象創(chuàng)建型模式┊74
3.3 Factory Method(工廠方法)—對(duì)象創(chuàng)建型模式┊81
3.4 Prototype(原型)—對(duì)象創(chuàng)建型模式┊89
3.5 Singleton(單件)—對(duì)象創(chuàng)建型模式┊96
3.6 創(chuàng)建型模式的討論┊102
第4章結(jié)構(gòu)型模式┊104
4.1 Adapter(適配器)—類對(duì)象結(jié)構(gòu)型模式┊106
4.2 Bridge(橋接)—對(duì)象結(jié)構(gòu)型模式┊115
4.3 Composite(組合)—對(duì)象結(jié)構(gòu)型模式┊123
4.4 Decorator(裝飾)—對(duì)象結(jié)構(gòu)型模式┊132
4.5 Facade(外觀)—對(duì)象結(jié)構(gòu)型模式┊┊139
4.6 Flyweight(享元)—對(duì)象結(jié)構(gòu)型模式┊146
4.7 Proxy(代理)—對(duì)象結(jié)構(gòu)型模式┊155
4.8 結(jié)構(gòu)型模式的討論 ┊164
4.8.1 Adapter與Bridge┊164
4.8.2 Composite、Decorator與Proxy┊164
第5章行為型模式┊166
5.1 Chain of Responsibility(職責(zé)鏈)—對(duì)象行為型模式┊167
5.2 Command(命令)—對(duì)象行為型模式┊175
5.3 Interpreter(解釋器)—類行為型模式┊183
5.4 Iterator(迭代器)—對(duì)象行為型模式┊193
5.5 Mediator(中介者)—對(duì)象行為型模式┊205
5.6 Memento(備忘錄)—對(duì)象行為型模式┊212
5.7 Observer(觀察者)—對(duì)象行為型模式┊219
5.8 State(狀態(tài))—對(duì)象行為型模式┊227
5.9 Strategy(策略)—對(duì)象行為型模式┊234
5.10 Template Method(模板方法)— 類行為型模式┊242
5.11 Visitor(訪問者)—對(duì)象行為型 模式┊246
5.12 行為型模式的討論┊256
5.12.1 封裝變化┊256
5.12.2 對(duì)象作為參數(shù)┊257
5.12.3 通信應(yīng)該被封裝還是被分布┊257
5.12.4 對(duì)發(fā)送者和接收者解耦┊258
5.12.5 總結(jié)┊260
第6章結(jié)論┊261
6.1 設(shè)計(jì)模式將帶來什么┊262
6.1.1 一套通用的設(shè)計(jì)詞匯┊262
6.1.2 書寫文檔和學(xué)習(xí)的輔助手段┊263
6.1.3 現(xiàn)有方法的一種補(bǔ)充┊263
6.1.4 重構(gòu)的目標(biāo)┊264
6.2 本書簡(jiǎn)史┊265
6.3 模式界┊266
6.3.1 Alexander的模式語言┊266
6.3.2 軟件中的模式┊267
6.4 邀請(qǐng)參與┊267
6.5 臨別感想┊268
附錄A詞匯表┊269
附錄B圖示符號(hào)指南┊273
附錄 C基本類┊277
參考文獻(xiàn)┊284