9787115439499

圖解設計模式

日結城浩 著,楊文軒 譯

  • 出版商: 人民郵電
  • 出版日期: 2016-11-30
  • 台幣定價: $474
  • 售價: $474
  • 語言: 簡體中文
  • 頁數: 366
  • ISBN: 7115439494
  • ISBN-13: 9787115439499

立即出貨

買這商品的人也買了...

產品描述

<內容簡介>

本書以淺顯易懂的語言逐一說明了GoF的23種設計模式。在講解過程中,不僅搭配了豐富的圖片,而且理論結合實例,用Java語言編寫代碼實現了設計模式的程序,讓程序真正地運行起來,並提供了運用模式解決具體問題的練習題和答案。除此以外,本書在必要時還對Java語言的功能進行補充說明,以加深讀者對Java的理解。

<章節目錄>

第1部分適應設計模式1
第1章Iterator模式——一個一個遍歷1
1.1 Iterator模式2
1.2示例程序2
Aggregate接口3
Iterator接口5
Book類5
BookShelf類5
BookShelfIteraotr類6
Main類7
1.3 Iterator模式中的登場角色8
1.4拓展思路的要點9
不管實現如何變化,都可以使用Iterator 9
難以理解抽像類和接口9
Aggregate和Iterator的對應9
容易弄錯“下一個” 10
還容易弄錯“最後一個” 10
多個Iterator 10
迭代器的種類多種多樣10
不需要deleteIterator 10
1.5相關的設計模式11
1.6本章所學知識11
1.7練習題11
第2章Adapter模式——加個“適配器”以便於復用13
2.1 Adapter模式14
2.2示例程序(1)(使用繼承的適配器) 14
Banner類15
Print接口16
PrintBanner類16
Main類16
2.3示例程序(2)(使用委託的示例程序) 17
Print類18
PrintBanner類18
2.4 Adapter模式中的登場角色18
2.5拓展思路的要點19
什麼時候使用Adapter模式19
如果沒有現成的代碼20
版本升級與兼容性20
功能完全不同的類20
2.6相關的設計模式20
2.7本章所學知識21
2.8練習題21
第2部分交給子類23
第3章Template Method模式——將具體處理交給子類23
3.1 Template Method模式24
什麼是模板24
什麼是Template Method模式24
3.2示例程序24
AbstractDisplay類25
CharDisplay類26
StringDisplay類27
Main類28
3.3 Template Method模式中的登場角色28
3.4拓展思路的要點29
可以使邏輯處理通用化29
父類與子類之間的協作29
父類與子類的一致性29
3.5相關的設計模式30
3.6延伸閱讀:類的層次與抽像類30
父類對子類的要求30
抽像類的意義30
父類與子類之間的協作31
3.7本章所學知識31
3.8練習題31
第4章Factory Method模式——將實例的生成交給子類33
4.1 Factory Method模式34
4.2示例程序34
Product類35
Factory類35
IDCard類36
IDCardFactory類36
Main類37
4.3 Factory Method模式中的登場角色37
4.4拓展思路的要點39
框架與具體加工39
生成實例——方法的三種實現方式39
使用模式與開發人員之間的溝通40
4.5相關的設計模式40
4.6本章所學知識41
4.7練習題41
第3部分生成實例43
第5章Singleton模式——只有一個實例43
5.1 Singleton模式44
5.2示例程序44
Singleton類44
Main類45
5.3 Singleton模式中的登場角色46
5.4拓展思路的要點46
為什麼必須設置限制46
何時生成這個唯一的實例46
5.5相關的設計模式47
5.6本章所學知識47
5.7練習題47
第6章Prototype模式——通過複製生成實例49
6.1 Prototype模式50
6.2示例程序50
Product接口51
Manager類52
MessageBox類52
UnderlinePen類53
Main類54
6.3 Prototype模式中的登場角色55
6.4拓展思路的要點56
不能根據類來生成實例嗎56
類名是束縛嗎56
6.5相關的設計模式57
6.6延伸閱讀:clone方法和java.lang.Clonable接口57
Java語言的clone 57
clone方法是在哪裡定義的58
需要實現Cloneable的哪些方法58
clone方法進行的是淺複製58
6.7本章所學知識58
6.8練習題59
第7章Builder模式——組裝複雜的實例61
7.1 Builder模式62
7.2示例程序62
Builder類63
Director類63
TextBuilder類64
HTMLBuilder類65
Main類65
7.3 Builder模式中的登場角色67
7.4相關的設計模式69
7.5拓展思路的要點69
誰知道什麼69
設計時能夠決定的事情和不能決定的事情70
代碼的閱讀方法和修改方法70
7.6本章所學知識70
7.7練習題70
第8章Abstract Factory模式——將關聯零件組裝成產品73
8.1 Abstract Factory模式74
8.2示例程序74
抽象的零件:Item類77
抽象的零件:Link類78
抽象的零件:Tray類78
抽象的產品:Page類79
抽象的工廠:Factory類79
使用工廠將零件組裝稱為產品:Main類80
具體的工廠:ListFactory類81
具體的零件:ListLink類82
具體的零件:ListTray類82
具體的產品:ListPage類83
8.3為示例程序增加其他工廠84
具體的工廠:TableFactory類85
具體的零件:TableLink類86
具體的零件:TableTray類86
具體的產品:TablePage類87
8.4 Abstract Factory模式中的登場角色87
8.5拓展思路的要點89
易於增加具體的工廠89
難以增加新的零件89
8.6相關的設計模式89
8.7延伸閱讀:各種生成實例的方法的介紹90
8.8本章所學知識91
8.9練習題91
第4部分分開考慮93
第9章Bridge模式——將類的功能層次結構與實現層次結構分離93
9.1 Bridge模式94
9.2示例程序95
類的功能層次結構:Display類96
類的功能層次結構:CountDisplay類97
類的實現層次結構:DisplayImpl類97
類的實現層次結構:StringDisplayImpl類98
Main類98
9.3 Bridge模式中的登場角色99
9.4拓展思路的要點100
分開後更容易擴展100
繼承是強關聯,委託是弱關聯100
9.5相關的設計模式101
9.6本章所學知識101
9.7練習題102
第10章Strategy模式——整體地替換算法103
10.1 Strategy模式104
10.2示例程序104
Hand類105
Strategy接口106
WinningStrategy類106
ProbStrategy類107
Player類109
Main類109
10.3 Strategy模式中的登場角色111
10.4拓展思路的要點112
為什麼需要特意編寫Strategy角色112
程序運行中也可以切換策略112
10.5相關的設計模式113
10.6本章所學知識113
10.7練習題113
第5部分一致性117
第11章Composite模式——容器與內容的一致性117
11.1 Composite模式118
11.2示例程序118
Entry類119
File類120
Directory類121
FileTreatMentException類122
Main類122
11.3 Composite模式中的登場角色124
11.4拓展思路的要點125
多個和單個的一致性125
Add方法應該放在哪裡126
到處都存在遞歸結構126
11.5相關的設計模式126
11.6本章所學知識127
11.7練習題127
第12章Decorator模式——裝飾邊框與被裝飾物的一致性129
12.1 Decorator模式130
12.2示例程序130
Display類131
StringDisplay類132
Border類132
SideBorder類133
FullBorder類134
Main類135
12.3 Decorator模式中的登場角色136
12.4拓展思路的要點137
接口(API)的透明性137
在不改變被裝飾物的前提下增加功能138
可以動態地增加功能138
只需要一些裝飾物即可添加許多功能138
java.io包與Decorator模式138
導致增加許多很小的類139
12.5相關的設計模式139
12.6延伸閱讀:繼承和委託中的一致性140
繼承——父類和子類的一致性140
委託——自己和被委託對象的一致性140
12.7本章所學知識142
12.8練習題142
第6部分訪問數據結構145
第13章Visitor模式——訪問數據結構並處理數據145
13.1 Visitor模式146
13.2示例程序146
Visitor類147
Element接口148
Entry類148
File類148
Directory類149
ListVisitor類150
FileTreatmentException類151
Main類151
Visitor與Element之間的相互調用152
13.3 Visitor模式中的登場角色154
13.4拓展思路的要點155
雙重分發155
為什麼要弄得這麼複雜155
開閉原則——對擴展開放,對修改關閉155
易於增加ConcreteVisitor角色156
難以增加ConcreteElement角色156
Visitor工作所需的條件156
13.5相關的設計模式157
13.6本章所學知識157
13.7練習題157
第14章Chain of Responsibility模式——推卸責任161
14.1 Chain of Responsibility模式162
14.2示例程序162
Trouble類163
Support類163
NoSupport類164
LimitSupport類164
OddSupport類165
SpecialSupport類165
Main類166
14.3 Chain of Responsibility模式中的登場角色167
14.4拓展思路的要點168
弱化了發出請求的人和處理請求的人之間的關係168
可以動態地改變職責鏈168
專注於自己的工作169
推卸請求會導致處理延遲嗎169
14.5相關的設計模式169
14.6本章所學知識169
14.7練習題169
第7部分簡單化171
第15章Facade模式——簡單窗口171
15.1 Facade模式172
15.2示例程序172
Database類173
HtmlWriter類174
PageMaker類175
Main類176
15.3 Facade模式中的登場角色176
15.4拓展思路的要點177
Facade角色到底做什麼工作177
遞歸地使用Facade模式178
開發人員不願意創建Facade角色的原因——心理原因178
15.5相關的設計模式178
15.6本章所學知識178
15.7練習題179
第16章Mediator模式——只有一個仲裁者181
16.1 Mediator模式182
16.2示例程序182
Mediator接口185
Colleague接口186
ColleagueButton類186
ColleagueTextField類187
ColleagueCheckbox類188
LoginFrame類188
Main類191
16.3 Mediator模式中的登場角色191
16.4拓展思路的要點192
當發生分散災難時192
通信線路的增加193
哪些角色可以復用193
16.5相關的設計模式193
16.6本章所學知識193
16.7練習題194
第8部分管理狀態195
第17章Observer模式——發送狀態變化通知195
17.1 Observer模式196
17.2示例程序196
Observer接口196
NumberGenerator類197
RandomNumberGenerator類198
DigitObserver類198
GraphObserver類199
Main類199
17.3 Observer模式中的登場角色200
17.4拓展思路的要點201
這裡也出現了可替換性201
Observer的順序202
當Observer的行為會對Subject產生影響時202
傳遞更新信息的方式202
從“觀察”變為“通知” 203
Model /View/Controller(MVC) 203
17.5延伸閱讀:java.util.Observer接口203
17.6相關的設計模式204
17.7本章所學知識204
17.8練習題204
第18章Memento模式——保存對象狀態207
18.1 Memento模式208
18.2示例程序208
Memento類209
Gamer類210
Main類211
18.3 Memento模式中的登場角色215
18.4拓展思路的要點216
兩種接口(API)和可見性216
需要多少個Memento 217
Memento的有效期限是多久217
劃分Caretaker角色和Originator角色的意義217
18.5相關的設計模式218
18.6本章所學知識218
18.7練習題218
第19章State模式——用類表示狀態221
19.1 State模式222
19.2示例程序222
金庫警報系統222
不使用State模式的偽代碼223
使用了State模式的偽代碼224
State接口226
DayState類226
NightState類227
Context接口228
SafeFrame類228
Main類231
19.3 State模式中的登場角色232
19.4拓展思路的要點233
分而治之233
依賴於狀態的處理233
應當是誰來管理狀態遷移233
不會自相矛盾234
易於增加新的狀態234
實例的多面性235
19.5相關的設計模式235
19.6本章所學知識235
19.7練習題236
第9部分避免浪費237
第20章Flyweight模式——共享對象,避免浪費237
20.1 Flyweight模式238
20.2示例程序238
BigChar類240
BigCharFactory類241
BigString類242
Main類244
20.3 Flyweight模式中的登場角色244
20.4拓展思路的要點245
對多個地方產生影響245
Intrinsic與Extrinsic 246
不要讓被共享的實例被垃圾回收器回收了246
內存之外的其他資源247
20.5相關的設計模式247
20.6本章所學知識247
20.7練習題247
第21章Proxy模式——只在必要時生成實例249
21.1 Proxy模式250
21.2示例程序250
Printer類251
Printable接口252
PrinterProxy類253
Main類254
21.3 Proxy模式中的登場角色254
21.4拓展思路的要點255
使用代理人來提升處理速度255
有必要劃分代理人和本人嗎256
代理與委託256
透明性256
HTTP代理256
各種Proxy模式257
21.5相關的設計模式257
21.6本章所學知識257
21.7練習題257
第10部分用類來表現259
第22章Command模式——命令也是類259
22.1 Command模式260
22.2示例程序260
Command接口261
MacroCommand類262
DrawCommand類263
Drawable接口263
DrawCanvas類264
Main類265
22.3 Command模式中的登場角色268
22.4拓展思路的要點269
命令中應該包含哪些信息269
保存歷史記錄269
適配器269
22.5相關的設計模式271
22.6本章所學知識272
22.7練習題272
第23章Interpreter模式——語法規則也是類273
23.1 Interpreter模式274
23.2迷你語言274
迷你語言的命令274
迷你語言程序示例275
迷你語言的語法278
終結符表達式與非終結符表達式279
23.3示例程序279
Node類281
ProgramNode類281
CommandListNode類282
CommandNode類283
RepeatCommandNode類284
PrimitiveCommandNode類285
Context類285
ParseException類286
Main類287
23.4 Interpreter模式中的登場角色288
23.5拓展思路的要點289
還有其他哪些迷你語言289
跳過標記還是讀取標記290
23.6相關的設計模式290
23.7本章所學知識以及本書的結束語290
23.8練習題290
附錄293
附錄A習題解答294
附錄B示例程序的運行步驟359
附錄C GoF對設計模式的分類361
附錄D設計模式Q&A 362
附錄E參考書籍365