設(shè)計(jì)模式:可復(fù)用面向?qū)ο筌浖幕A(chǔ)(精裝版) [美] 埃里克·伽瑪 理查德·赫爾姆 拉爾夫·約翰遜
定 價:99 元
- 作者:[美] 埃里克·伽瑪 理查德·赫爾姆 拉爾夫·約翰遜 約翰·威利斯迪斯
- 出版時間:2024/8/1
- ISBN:9787111760238
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:
- 頁碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書結(jié)合設(shè)計(jì)實(shí)例從面向?qū)ο蟮脑O(shè)計(jì)中精選出23個設(shè)計(jì)模式, 總結(jié)了面向?qū)ο笤O(shè)計(jì)中最有價值的經(jīng)驗(yàn), 并且用簡潔可復(fù)用的形式表達(dá)出來。本書分類描述了一組設(shè)計(jì)良好、 表達(dá)清楚的軟件設(shè)計(jì)模式, 這些模式在實(shí)用環(huán)境下特別有用。 本書適合大學(xué)計(jì)算機(jī)專業(yè)的學(xué)生、研究生及相關(guān)人員參考。
本書是軟件工程領(lǐng)域的經(jīng)典名著,引導(dǎo)讀者走出軟件設(shè)計(jì)迷宮的指路明燈,凝聚了軟件開發(fā)界幾十年的設(shè)計(jì)經(jīng)驗(yàn)。四位頂尖的面向?qū)ο箢I(lǐng)域?qū)<揖倪x取了頗具價值的設(shè)計(jì)實(shí)踐,加以分類整理和命名,并用簡潔而易于復(fù)用的形式表達(dá)出來。本書已經(jīng)成為面向?qū)ο蠹夹g(shù)人員的詞典,書中定義的23個模式逐漸成為開發(fā)界技術(shù)交流所的基礎(chǔ)知識和詞匯。
前言
本書并不是一本介紹面向?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)系時,你應(yīng)該對這些概念了然于胸,而不是迫不及待地翻閱手頭的字典。
另外,這也不是一篇高級專題技術(shù)論文,而是一本關(guān)于設(shè)計(jì)模式的書,它描述了在面向?qū)ο筌浖O(shè)計(jì)過程中針對特定問題的簡潔而優(yōu)雅的解決方案。設(shè)計(jì)模式捕獲了隨時間進(jìn)化與發(fā)展的問題的求解方法,因此它們并不是人們從一開始就采用的設(shè)計(jì)方案。它們反映了不為人知的重新設(shè)計(jì)和重新編碼的成果,而這些都來自軟件開發(fā)者為了設(shè)計(jì)出靈活、可復(fù)用的軟件而長時間進(jìn)行的艱苦努力。設(shè)計(jì)模式捕獲了這些解決方案,并用簡潔易用的方式表達(dá)出來。
設(shè)計(jì)模式并不要求使用獨(dú)特的語言特性,也不采用那些足以使你的朋友或老板大吃一驚的神奇的編程技巧。所有的模式均可以用標(biāo)準(zhǔn)的面向?qū)ο笳Z言實(shí)現(xiàn),這有時也許會比特殊的解法多費(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)然還有一些提示和鼓勵:第一次閱讀本書時你可能不會完全理解它,但不必著急,我們在起初編寫這本書時也沒有完全理解它們!請記住,這不是一本讀完一遍就可以束之高閣的書。我們希望你在軟件設(shè)計(jì)過程中反復(fù)參閱本書,以獲取設(shè)計(jì)靈感。
我們并不認(rèn)為這組設(shè)計(jì)模式是完整的和一成不變的,它只是我們目前對設(shè)計(jì)的思考的記錄。因此我們歡迎廣大讀者進(jìn)行批評與指正,無論從書中采用的實(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獲取書中的示例代碼部分的源代碼。
另外我們有一個專門的網(wǎng)頁報道最新的消息與更新:
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ā)了單元測試框架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 尋找合適的對象?┊10
1.6.2 決定對象的粒度?┊11
1.6.3 指定對象接口?┊11
1.6.4 描述對象的實(shí)現(xiàn)?┊12
1.6.5 運(yùn)用復(fù)用機(jī)制?┊15
1.6.6 關(guān)聯(lián)運(yùn)行時和編譯時的結(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ì)一個文檔?編輯器?┊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 對象創(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 封裝一個請求?┊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 遍歷和遍歷過程中的動作?┊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(抽象工廠)—對象創(chuàng)建型模式?┊66
3.2 Builder(生成器)—對象創(chuàng)建型模式?┊74
3.3 Factory Method(工廠方法)—對象創(chuàng)建型模式?┊81
3.4 Prototype(原型)—對象創(chuàng)建型模式?┊89
3.5 Singleton(單件)—對象創(chuàng)建型模式?┊96
3.6 創(chuàng)建型模式的討論?┊102
第4章?結(jié)構(gòu)型模式?┊104
4.1 Adapter(適配器)—類對象結(jié)構(gòu)型模式?┊106
4.2 Bridge(橋接)—對象結(jié)構(gòu)型模式?┊115
4.3 Composite(組合)—對象結(jié)構(gòu)型模式?┊123
4.4 Decorator(裝飾)—對象結(jié)構(gòu)型模式?┊132
4.5 Facade(外觀)—對象結(jié)構(gòu)型模式?┊139
4.6 Flyweight(享元)—對象結(jié)構(gòu)型模式?┊146
4.7 Proxy(代理)—對象結(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é)鏈)—對象行為型模式?┊167
5.2 Command(命令)—對象行為型模式?┊175
5.3 Interpreter(解釋器)—類行為型模式?┊183
5.4 Iterator(迭代器)—對象行為型模式?┊193
5.5 Mediator(中介者)—對象行為型模式?┊205
5.6 Memento(備忘錄)—對象行為型模式?┊212
5.7 Observer(觀察者)—對象行為型模式?┊219
5.8 State(狀態(tài))—對象行為型模式?┊227
5.9 Strategy(策略)—對象行為型模式?┊234
5.10 Template Method(模板方法)— 類行為型模式?┊242
5.11 Visitor(訪問者)—對象行為型 模式?┊246
5.12 行為型模式的討論?┊256
5.12.1 封裝變化?┊256
5.12.2 對象作為參數(shù)?┊257
5.12.3 通信應(yīng)該被封裝還是被分布?┊257
5.12.4 對發(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 本書簡史?┊265
6.3 模式界?┊266
6.3.1 Alexander的模式語言?┊266
6.3.2 軟件中的模式?┊267
6.4 邀請參與?┊267
6.5 臨別感想?┊268
附錄A?詞匯表?┊269
附錄B?圖示符號指南?┊273
附錄 C?基本類?┊277
參考文獻(xiàn)?┊284