本書是面向有一定Java語言基礎(chǔ)和一定編程經(jīng)驗(yàn)的讀者,重點(diǎn)介紹了面向?qū)ο蟮暮诵膬?nèi)容以及作者在面向?qū)ο笱芯恐械囊恍┬滤枷,全面探討在Java程序設(shè)計(jì)中怎樣使用一些重要的設(shè)計(jì)模式。作者編寫本書的目的是讓讀者不僅學(xué)習(xí)怎樣在軟件設(shè)計(jì)中使用好設(shè)計(jì)模式,更重要的是讓讀者通過學(xué)習(xí)使用設(shè)計(jì)模式深刻地理解面向?qū)ο蟮脑O(shè)計(jì)思想,以便更好地使用面向?qū)ο笳Z言解決設(shè)計(jì)中的諸多問題。
本書可以作為計(jì)算機(jī)相關(guān)專業(yè)研究生或高年級(jí)學(xué)生的教材,也可以作為軟件項(xiàng)目管理人員、軟件開發(fā)工程師等專業(yè)人員的參考用書。可登錄www.tup.com.cn下載書中的示例代碼。
目前,面向?qū)ο蟪绦蛟O(shè)計(jì)已經(jīng)成為軟件設(shè)計(jì)開發(fā)領(lǐng)域的主流,而學(xué)習(xí)使用設(shè)計(jì)模式無疑非常有助于軟件開發(fā)人員使用面向?qū)ο笳Z言開發(fā)出易維護(hù)、易擴(kuò)展、易復(fù)用的代碼,其原因是設(shè)計(jì)模式是從許多優(yōu)秀的軟件系統(tǒng)中總結(jié)出的成功的可復(fù)用的設(shè)計(jì)方案,已被成功應(yīng)用于許多系統(tǒng)的設(shè)計(jì)中。本書是面向有一定Java語言基礎(chǔ)和一定編程經(jīng)驗(yàn)的讀者,重點(diǎn)介紹了面向?qū)ο蟮暮诵膬?nèi)容,全面探討在程序設(shè)計(jì)中怎樣使用一些重要的設(shè)計(jì)模式。作者編寫本書的目的是讓讀者不僅學(xué)習(xí)怎樣在軟件設(shè)計(jì)過程中使用好設(shè)計(jì)模式,更重要的是讓讀者通過學(xué)習(xí)使用設(shè)計(jì)模式深刻地理解面向?qū)ο蟮脑O(shè)計(jì)思想,以便更好地使用面向?qū)ο笳Z言解決設(shè)計(jì)中的諸多問題。
本書共26章,前6章重點(diǎn)介紹了面向?qū)ο蟮暮诵膬?nèi)容,以及作者在面向?qū)ο笱芯恐械囊恍┬滤枷;?章~第26章探討在程序設(shè)計(jì)中怎樣使用一些重要的設(shè)計(jì)模式。為了說明一個(gè)模式的核心實(shí)質(zhì),本書精心研究了針對(duì)每個(gè)模式的示例,以便讓讀者結(jié)合這樣的示例更好地理解和使用模式。本書的全部示例由作者編寫完成,本書示例代碼及相關(guān)內(nèi)容僅供學(xué)習(xí)設(shè)計(jì)模式使用。希望本書能對(duì)讀者學(xué)習(xí)和使用設(shè)計(jì)模式有所幫助,并請讀者批評(píng) 指正。
作 者
2013年4月
第1章 面向?qū)ο笕腴T1
1.1 編程語言的幾個(gè)發(fā)展階段1
1.1.1 面向機(jī)器語言1
1.1.2 面向過程語言1
1.1.3 面向?qū)ο笳Z言2
1.1.4 使用Java的必要性3
1.2 從抽象到類3
1.3 類與程序的基本結(jié)構(gòu)5
1.4 使用的開發(fā)工具6
第2章 封裝7
2.1 從類的角度看封裝性7
2.1.1 封裝數(shù)據(jù)及操作7
2.1.2 類的UML圖8
2.2 從對(duì)象的角度看封裝性9
2.2.1 創(chuàng)建對(duì)象所體現(xiàn)的封裝性9
2.2.2 對(duì)象訪問變量和調(diào)用方法所體現(xiàn)的封裝性11
2.2.3 實(shí)例變量和類變量體現(xiàn)的封裝性12
2.2.4 關(guān)于實(shí)例方法和類方法13
2.3 從使用者角度看封裝性14
2.4 有理數(shù)的類封裝15
2.4.1 Rational類15
2.4.2 用Rational對(duì)象做運(yùn)算18
2.5 從訪問權(quán)限看封裝性19
2.5.1 訪問限制修飾符19
2.5.2 加強(qiáng)封裝性21
2.6 包與類的封裝22
2.6.1 包封裝22
2.6.2 引入類庫中的類24
2.6.3 引入自定義包中的類24
第3章 繼承、接口與多態(tài)26
3.1 子類與父類26
3.2 子類的繼承性27
3.3 關(guān)于protected的進(jìn)一步說明27
3.4 子類對(duì)象的特點(diǎn)28
3.5 隱藏繼承的成員29
3.6 通過重寫實(shí)現(xiàn)多態(tài)30
3.7 上轉(zhuǎn)型對(duì)象體現(xiàn)多態(tài)31
3.8 通過final禁止多態(tài)33
3.9 通過super解決多態(tài)帶來的問題33
3.10 接口34
3.11 接口回調(diào)體現(xiàn)的多態(tài)36
3.12 重載體現(xiàn)的多態(tài)38
第4章 組合41
4.1 引用的重要作用41
4.2 對(duì)象的組合44
4.3 組合關(guān)系和依賴關(guān)系46
4.4 組合關(guān)系是弱耦合關(guān)系47
4.5 基于組合的流水線48
4.6 汽車動(dòng)態(tài)更換駕駛員50
第5章 面向?qū)ο蟮膸讉(gè)基本原則53
5.1 抽象類與接口53
5.1.1 抽象類53
5.1.2 接口54
5.2 面向抽象原則55
5.3 “開-閉”原則57
5.3.1 什么是“開-閉”原則57
5.3.2 標(biāo)準(zhǔn)、標(biāo)準(zhǔn)構(gòu)件和面向標(biāo)準(zhǔn)的產(chǎn)品58
5.4 “多用組合,少用繼承”原則61
5.4.1 繼承與復(fù)用61
5.4.2 組合與復(fù)用62
5.4.3 多用組合,少用繼承62
5.5 “高內(nèi)聚-弱耦合”原則63
第6章 設(shè)計(jì)模式簡介64
6.1 什么是設(shè)計(jì)模式64
6.2 設(shè)計(jì)模式的起源65
6.3 GOF之著作65
6.4 學(xué)習(xí)設(shè)計(jì)模式的重要性65
6.5 合理使用模式66
6.6 什么是框架67
6.7 模式分類68
6.8 設(shè)計(jì)模式資源69
第7章 策略模式70
7.1 策略模式的結(jié)構(gòu)與使用70
7.1.1 策略模式的結(jié)構(gòu)70
7.1.2 策略模式的使用74
7.2 策略模式的優(yōu)點(diǎn)75
7.3 適合使用策略模式的情景75
7.4 策略模式相對(duì)繼承機(jī)制的優(yōu)勢76
7.5 舉例——加密、解密文件76
7.5.1 設(shè)計(jì)要求76
7.5.2 設(shè)計(jì)實(shí)現(xiàn)76
第8章 狀態(tài)模式82
8.1 狀態(tài)模式的結(jié)構(gòu)與使用82
8.1.1 狀態(tài)模式的結(jié)構(gòu)82
8.1.2 狀態(tài)模式的使用85
8.2 狀態(tài)切換86
8.3 狀態(tài)模式的優(yōu)點(diǎn)89
8.4 適合使用狀態(tài)模式的情景89
8.5 舉例——模擬咖啡自動(dòng)售貨機(jī)89
8.5.1 設(shè)計(jì)要求89
8.5.2 設(shè)計(jì)實(shí)現(xiàn)90
第9章 命令模式93
9.1 命令模式的結(jié)構(gòu)與使用93
9.1.1 命令模式的結(jié)構(gòu)93
9.1.2 命令模式的使用97
9.2 命令接口中的撤銷方法98
9.3 命令模式的優(yōu)點(diǎn)101
9.4 適合使用命令模式的情景101
9.5 舉例——控制電燈101
9.5.1 設(shè)計(jì)要求101
9.5.2 設(shè)計(jì)實(shí)現(xiàn)101
第10章 中介者模式105
10.1 中介者模式的結(jié)構(gòu)與使用105
10.1.1 中介者模式的結(jié)構(gòu)105
10.1.2 中介者模式的使用108
10.2 中介者模式的優(yōu)點(diǎn)110
10.3 適合使用中介者模式的情景110
10.4 舉例——組件交互110
10.4.1 設(shè)計(jì)要求110
10.4.2 設(shè)計(jì)實(shí)現(xiàn)111
第11章 責(zé)任鏈模式114
11.1 責(zé)任鏈模式的結(jié)構(gòu)與使用114
11.1.1 責(zé)任鏈模式的結(jié)構(gòu)114
11.1.2 責(zé)任鏈模式的使用118
11.2 責(zé)任鏈模式的優(yōu)點(diǎn)118
11.3 適合使用責(zé)任鏈模式的情景119
11.4 舉例——計(jì)算階乘119
11.4.1 設(shè)計(jì)要求119
11.4.2 設(shè)計(jì)實(shí)現(xiàn)119
第12章 模板方法模式123
12.1 模板方法模式的結(jié)構(gòu)與使用123
12.1.1 模板方法模式的結(jié)構(gòu)123
12.1.2 模板方法模式的使用126
12.2 鉤子方法127
12.3 模板方法模式的優(yōu)點(diǎn)130
12.4 適合使用模板方法模式的情景130
12.5 舉例——考試與成績錄入130
12.5.1 設(shè)計(jì)要求130
12.5.2 設(shè)計(jì)實(shí)現(xiàn)131
第13章 觀察者模式135
13.1 觀察者模式的結(jié)構(gòu)與使用135
13.1.1 觀察者模式的結(jié)構(gòu)135
13.1.2 觀察者模式的使用140
13.2 觀察者模式中的“推”數(shù)據(jù)與“拉”數(shù)據(jù)141
13.3 觀察者模式的優(yōu)點(diǎn)144
13.4 適合使用觀察者模式的情景145
13.5 舉例——關(guān)注天氣和旅游信息145
13.5.1 設(shè)計(jì)要求145
13.5.2 設(shè)計(jì)實(shí)現(xiàn)145
第14章 訪問者模式150
14.1 訪問者模式的結(jié)構(gòu)與使用150
14.1.1 訪問者模式的結(jié)構(gòu)150
14.1.2 訪問者模式的使用153
14.2 雙重分派154
14.3 訪問者模式的優(yōu)點(diǎn)154
14.4 適合使用訪問模式的情景155
14.5 舉例——評(píng)價(jià)體檢表155
14.5.1 設(shè)計(jì)要求155
14.5.2 設(shè)計(jì)實(shí)現(xiàn)155
第15章 裝飾模式160
15.1 裝飾模式的結(jié)構(gòu)與使用160
15.1.1 裝飾模式的結(jié)構(gòu)160
15.1.2 裝飾模式的使用163
15.2 使用多個(gè)裝飾者164
15.3 裝飾模式相對(duì)繼承機(jī)制的優(yōu)勢165
15.4 裝飾模式的優(yōu)點(diǎn)166
15.5 適合使用裝飾模式的情景166
15.6 舉例——讀取單詞表166
15.6.1 設(shè)計(jì)要求166
15.6.2 設(shè)計(jì)實(shí)現(xiàn)167
第16章 組合模式171
16.1 組合模式的結(jié)構(gòu)與使用171
16.1.1 組合模式的結(jié)構(gòu)171
16.1.2 組合模式的使用174
16.2 組合模式的優(yōu)點(diǎn)176
16.3 適合使用組合模式的情景176
16.4 舉例——蘋果樹的重量及蘋果的價(jià)值176
16.4.1 設(shè)計(jì)要求176
16.4.2 設(shè)計(jì)實(shí)現(xiàn)177
第17章 適配器模式180
17.1 適配器模式的結(jié)構(gòu)與使用180
17.1.1 適配器模式的結(jié)構(gòu)180
17.1.2 適配器模式的使用182
17.1.3 適配器的適配程度183
17.2 適配器模式的優(yōu)點(diǎn)184
17.3 適合使用適配器模式的情景184
17.4 單接口適配器184
17.5 舉例——Iterator接口與Enumeration接口185
17.5.1 設(shè)計(jì)要求185
17.5.2 設(shè)計(jì)實(shí)現(xiàn)185
第18章 外觀模式188
18.1 外觀模式的結(jié)構(gòu)與使用188
18.1.1 外觀模式的結(jié)構(gòu)188
18.1.2 外觀模式的使用190
18.2 外觀模式的優(yōu)點(diǎn)191
18.3 適合使用外觀模式的情景191
18.4 舉例——解析文件191
18.4.1 設(shè)計(jì)要求191
18.4.2 設(shè)計(jì)實(shí)現(xiàn)192
第19章 代理模式195
19.1 代理模式的結(jié)構(gòu)與使用195
19.1.1 代理模式的結(jié)構(gòu)195
19.1.2 代理模式的使用197
19.2 遠(yuǎn)程代理198
19.2.1 RMI與代理模式198
19.2.2 RMI的設(shè)計(jì)細(xì)節(jié)199
19.3 代理模式的優(yōu)點(diǎn)203
19.4 適合使用代理模式的情景203
19.5 舉例——使用遠(yuǎn)程窗口閱讀文件203
19.5.1 設(shè)計(jì)要求203
19.5.2 設(shè)計(jì)實(shí)現(xiàn)203
第20章 享元模式207
20.1 享元模式的結(jié)構(gòu)與使用207
20.1.1 享元模式的結(jié)構(gòu)207
20.1.2 享元模式的使用212
20.2 享元模式的優(yōu)點(diǎn)213
20.3 適合使用享元模式的情景213
20.4 舉例——化合物213
20.4.1 設(shè)計(jì)要求213
20.4.2 設(shè)計(jì)實(shí)現(xiàn)214
第21章 橋接模式218
21.1 橋接模式的結(jié)構(gòu)與使用218
21.1.1 橋接模式的結(jié)構(gòu)218
21.1.2 橋接模式的使用221
21.2 橋接模式的優(yōu)點(diǎn)222
21.3 適合使用橋接模式的情景222
21.4 舉例——模擬電視節(jié)目222
21.4.1 設(shè)計(jì)要求222
21.4.2 設(shè)計(jì)實(shí)現(xiàn)222
第22章 工廠方法模式226
22.1 工廠方法模式的結(jié)構(gòu)與使用226
22.1.1 工廠方法模式的結(jié)構(gòu)226
22.1.2 工廠方法模式的使用229
22.2 工廠方法模式的優(yōu)點(diǎn)230
22.3 適合使用工廠方法模式的情景231
22.4 舉例——藥品231
22.4.1 設(shè)計(jì)要求231
22.4.2 設(shè)計(jì)實(shí)現(xiàn)231
第23章 抽象工廠模式235
23.1 抽象工廠模式的結(jié)構(gòu)與使用235
23.1.1 抽象工廠模式的結(jié)構(gòu)235
23.1.2 抽象工廠模式的使用240
23.2 工廠方法模式的優(yōu)點(diǎn)241
23.3 適合使用抽象工廠模式的情景242
23.4 舉例——商店與西服、牛仔服242
23.4.1 設(shè)計(jì)要求242
23.4.2 設(shè)計(jì)實(shí)現(xiàn)242
23.4.3 模式的使用245
第24章 生成器模式247
24.1 生成器模式的結(jié)構(gòu)與使用247
24.1.1 生成器模式的結(jié)構(gòu)247
24.1.2 生成器模式的使用250
24.2 生成器模式的優(yōu)點(diǎn)251
24.3 適合使用生成器模式的情景252
24.4 舉例——日歷牌252
24.4.1 設(shè)計(jì)要求252
24.4.2 設(shè)計(jì)實(shí)現(xiàn)252
第25章 原型模式259
25.1 java.lang.Object類的clone方法259
25.2 Serializable接口與克隆對(duì)象263
25.3 原型模式的結(jié)構(gòu)與使用263
25.3.1 原型模式的結(jié)構(gòu)263
25.3.2 原型模式的使用265
25.4 原型模式的優(yōu)點(diǎn)266
25.5 適合使用原型模式的情景266
25.6 舉例——克隆容器267
25.6.1 設(shè)計(jì)要求267
25.6.2 設(shè)計(jì)實(shí)現(xiàn)267
第26章 單件模式270
26.1 單件模式的結(jié)構(gòu)與使用270
26.1.1 單件模式的結(jié)構(gòu)270
26.1.2 單件模式的使用272
26.2 單件模式的優(yōu)點(diǎn)273
26.3 適合使用單件模式的情景273
26.4 舉例——冠軍273
26.4.1 設(shè)計(jì)要求273
26.4.2 設(shè)計(jì)實(shí)現(xiàn)273
參考文獻(xiàn)278