設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)(精裝版) [美] 埃里克·伽瑪 理查德·赫爾姆 拉爾夫·約翰遜
定 價(jià):99 元
當(dāng)前圖書已被 16 所學(xué)校薦購(gòu)過(guò)!
查看明細(xì)
- 作者:[美] 埃里克·伽瑪 理查德·赫爾姆 拉爾夫·約翰遜 約翰·威利斯迪斯
- 出版時(shí)間:2024/8/1
- ISBN:9787111760238
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開(kāi)本:16開(kāi)
本書結(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á)出來(lái)。本書分類描述了一組設(shè)計(jì)良好、 表達(dá)清楚的軟件設(shè)計(jì)模式, 這些模式在實(shí)用環(huán)境下特別有用。 本書適合大學(xué)計(jì)算機(jī)專業(yè)的學(xué)生、研究生及相關(guān)人員參考。
本書是軟件工程領(lǐng)域的經(jīng)典名著,引導(dǎo)讀者走出軟件設(shè)計(jì)迷宮的指路明燈,凝聚了軟件開(kāi)發(fā)界幾十年的設(shè)計(jì)經(jīng)驗(yàn)。四位頂尖的面向?qū)ο箢I(lǐng)域?qū)<揖倪x取了頗具價(jià)值的設(shè)計(jì)實(shí)踐,加以分類整理和命名,并用簡(jiǎn)潔而易于復(fù)用的形式表達(dá)出來(lái)。本書已經(jīng)成為面向?qū)ο蠹夹g(shù)人員的詞典,書中定義的23個(gè)模式逐漸成為開(kāi)發(fā)界技術(shù)交流所的基礎(chǔ)知識(shí)和詞匯。
前言
本書并不是一本介紹面向?qū)ο蠹夹g(shù)或設(shè)計(jì)的書,目前已有不少好書介紹面向?qū)ο蠹夹g(shù)或設(shè)計(jì)。本書假設(shè)你至少已經(jīng)比較熟悉一種面向?qū)ο缶幊陶Z(yǔ)言,并且有一定的面向?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ì)過(guò)程中針對(duì)特定問(wèn)題的簡(jiǎn)潔而優(yōu)雅的解決方案。設(shè)計(jì)模式捕獲了隨時(shí)間進(jìn)化與發(fā)展的問(wèn)題的求解方法,因此它們并不是人們從一開(kāi)始就采用的設(shè)計(jì)方案。它們反映了不為人知的重新設(shè)計(jì)和重新編碼的成果,而這些都來(lái)自軟件開(kāi)發(fā)者為了設(shè)計(jì)出靈活、可復(fù)用的軟件而長(zhǎng)時(shí)間進(jìn)行的艱苦努力。設(shè)計(jì)模式捕獲了這些解決方案,并用簡(jiǎn)潔易用的方式表達(dá)出來(lái)。
設(shè)計(jì)模式并不要求使用獨(dú)特的語(yǔ)言特性,也不采用那些足以使你的朋友或老板大吃一驚的神奇的編程技巧。所有的模式均可以用標(biāo)準(zhǔn)的面向?qū)ο笳Z(yǔ)言實(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í)也沒(méi)有完全理解它們!請(qǐng)記住,這不是一本讀完一遍就可以束之高閣的書。我們希望你在軟件設(shè)計(jì)過(guò)程中反復(fù)參閱本書,以獲取設(shè)計(jì)靈感。
我們并不認(rèn)為這組設(shè)計(jì)模式是完整的和一成不變的,它只是我們目前對(duì)設(shè)計(jì)的思考的記錄。因此我們歡迎廣大讀者進(jìn)行批評(píng)與指正,無(wú)論從書中采用的實(shí)例、參考,還是我們遺漏的已知應(yīng)用,或應(yīng)該包含的設(shè)計(jì)模式等方面。你可以通過(guò)Addison-Wesley寫信給我們,或發(fā)送電子郵件到design-patterns@cs.uiuc.edu。你還可以發(fā)送郵件“send design pattern source”到design-patterns-source@cs.uiuc.edu獲取書中的示例代碼部分的源代碼。
另外我們有一個(gè)專門的網(wǎng)頁(yè)報(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合作開(kāi)發(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)任研究員,并在澳大利亞開(kāi)創(chuàng)了IBM面向?qū)ο蠹夹g(shù)研究分部。
拉爾夫·約翰遜(Ralph Johnson) 在美國(guó)康奈爾大學(xué)獲得計(jì)算機(jī)科學(xué)博士學(xué)位,伊利諾伊大學(xué)教授,在模式、重構(gòu)等領(lǐng)域均有很高造詣。
約翰·威利斯迪斯(John Vlissides) 在美國(guó)斯坦福大學(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ì)問(wèn)題?┊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ì)問(wèn)題?┊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 訪問(wèn)分散的信息?┊51
2.8.2 封裝訪問(wèn)和遍歷?┊51
2.8.3 Iterator類及其子類?┊52
2.8.4 Iterator模式?┊55
2.8.5 遍歷和遍歷過(guò)程中的動(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(訪問(wèn)者)—對(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ì)模式將帶來(lái)什么?┊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的模式語(yǔ)言?┊266
6.3.2 軟件中的模式?┊267
6.4 邀請(qǐng)參與?┊267
6.5 臨別感想?┊268
附錄A?詞匯表?┊269
附錄B?圖示符號(hào)指南?┊273
附錄 C?基本類?┊277
參考文獻(xiàn)?┊284