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