第一篇 模式介紹 1
第1章 談麵嚮對象和模式 3
1.1 什麼是對象 4
1.2 麵嚮對象的好處 5
1.3 重用 6
1.4 模式簡史 7
1.5 什麼是模式 8
1.6 學習設計模式的一些常見問題 11
1.7 本章關鍵詞 13
第2章 第1個模式——模闆方法(template method)模式 15
2.1 從迴傢過年說起 16
2.1.1 DRY(don't repeat yourself) 18
2.1.2 變化+重復,如何維護 20
2.2 模闆方法(template method)模式 21
2.2.1 使用繼承 21
2.2.2 模闆方法模式 24
2.3 引入迴調(callback) 26
2.4 總結 30
2.5 本章關鍵詞 30
第二篇 創建對象 31
第3章 單例(singleton)模式 33
3.1 最簡單的單例 34
3.2 進階 35
3.2.1 延遲創建 35
3.2.2 綫程安全 36
3.2.3 double-check locking 37
3.2.4 initialization on demand holder 39
3.2.5 singleton的序列化 40
3.3 總結 41
3.4 本章關鍵詞 42
第4章 工廠方法(factory method)模式 43
4.1 工廠方法模式 44
4.1.1 類圖 44
4.1.2 創建數據庫連接對象 47
4.2 靜態工廠方法 52
4.3 總結 53
4.4 本章關鍵詞 54
第5章 原型(prototype)模式 55
5.1 原型模式 56
5.2 寄個快遞 57
5.3 實現 57
5.3.1 uml靜態類圖 57
5.3.2 代碼實現 58
5.4 深拷貝(deep copy) 61
5.5 總結 65
5.6 本章關鍵詞 65
第6章 控製反轉(ioc) 67
6.1 從創建對象談起 68
6.2 使用工廠方法模式的問題 70
6.3 inversion of control(控製反轉) 71
6.3.1 ioc和di(dependency injection,依賴注入) 72
6.3.2 service locator(服務定位器) 73
6.3.3 dependency injection 76
6.4 總結 91
6.5 本章關鍵詞 92
第三篇 構建復雜結構 93
第7章 裝飾器(decorator)模式 95
7.1 記錄曆史修改 96
7.2 open-closed principle(開放—封閉原則,ocp) 99
7.3 裝飾器(decorator)模式 101
7.3.1 類圖 101
7.3.2 實現 101
7.3.3 一點變化 107
7.3.4 如何使用 108
7.3.5 測試 108
7.4 裝飾器模式的優缺點 110
7.5 總結 111
7.6 本章關鍵詞 111
第8章 代理(proxy)模式 113
8.1 代理(proxy)模式 114
8.1.1 類圖 114
8.1.2 訪問分布式對象 114
8.2 j2se動態代理 122
8.2.1 類和接口 122
8.2.2 調用原理 124
8.2.3 實現同步 125
8.2.4 總結 131
8.3 和裝飾器(decorator)模式的比較 131
8.4 總結 132
8.5 本章關鍵詞 132
第9章 適配器(adapter)模式 133
9.1 打樁 134
9.2 其他適配器模式 137
9.2.1 類適配器 137
9.2.2 雙嚮適配器 138
9.3 測試 139
9.4 和代理(proxy)模式的比較 141
9.5 總結 141
9.6 本章關鍵詞 142
第10章 外觀(facade)模式 143
10.1 外觀(facade)模式 144
10.2 least knowledge principle(最少知識原則) 144
10.3 懶惰的老闆請客 145
10.4 ejb裏的外觀模式 148
10.5 總結 150
10.6 本章關鍵詞 150
第11章 組閤(composite)模式 151
11.1 組閤模式概述 152
11.1.1 類圖 152
11.1.2 使用組閤(composite)模式 153
11.1.3 測試 156
11.2 透明的組閤模式 159
11.3 安全的組閤模式vs透明的組閤模式 162
11.4 還需要注意什麼 162
11.5 總結 163
11.6 本章關鍵詞 163
第四篇 行為模式 165
第12章 策略(strategy)模式 167
12.1 既要坐飛機又要坐大巴 168
12.2 封裝變化 169
12.3 策略模式 172
12.4 還需要繼承嗎 173
12.5 優先使用閤成而非繼承 175
12.6 總結 176
12.7 本章關鍵詞 177
第13章 狀態(state)模式 179
13.1 電子顔料闆 180
13.2 switch-case實現 180
13.3 如何封裝變化 181
13.4 狀態模式 186
13.5 使用enum類型 186
13.6 與策略(strategy)模式的比較 191
13.7 總結 191
13.8 本章關鍵詞 192
第14章 觀察者(observer)模式 193
14.1 股票價格變瞭多少 194
14.2 觀察者模式 194
14.2.1 如何實現 194
14.2.2 觀察者模式 201
14.2.3 java標準庫的觀察者模式 201
14.3 總結 208
14.4 本章關鍵詞 208
第五篇 終點還是起點 209
第15章 麵嚮切麵的編程(aop) 211
15.1 記錄時間 212
15.2 aop(aspect-oriented programming) 215
15.2.1 一些重要概念 216
15.2.2 oop實現橫切 217
15.2.3 aop實現技術 218
15.3 aop框架介紹 244
15.4 aop聯盟(aop alliance) 245
15.5 使用aop編程的風險 245
15.6 oop還是aop 246
15.7 總結 247
15.8 本章關鍵詞 248
第16章 麵嚮對象開發 249
16.1 寫在麵嚮對象設計之前 250
16.2 汲取知識 251
16.3 橫看成嶺側成峰 253
16.4 提煉模型 254
16.5 應用設計模式 259
16.6 不能脫離實現技術 259
16.7 重構 260
16.8 過度的開發(over-engineering) 262
16.9 總結 263
16.10 本章關鍵詞 264
第17章 結語 265
17.1 感悟 266
17.2 麵嚮對象的開發範式 266
17.3 一些原則 268
17.4 寫在模式之後 269
17.5 本章關鍵詞 269
附錄A 推薦閱讀資源 271
1 Java語言相關學習圖書 272
2 J2EE技術相關圖書 273
3 麵嚮對象設計相關圖書 273
4 給Agile(敏捷)開發人員推薦的書籍 275
5 網站和論壇 275
參考文獻 277
· · · · · · (
收起)