基 礎 篇
第0章 啓程之前,請不要錯過我 2
0.1 Python精簡入門 2
0.1.1 Python的特點 2
0.1.2 基本語法 3
0.1.3 一個例子讓你頓悟 7
0.1.4 重要說明 11
0.2 UML精簡概述 11
0.2.1 UML的定義 11
0.2.2 常見的關係 12
第1章 監聽模式 16
1.1 從生活中領悟監聽模式 16
1.1.1 故事劇情—幻想中的智能熱水器 16
1.1.2 用程序來模擬生活 17
1.2 從劇情中思考監聽模式 19
1.2.1 什麼是監聽模式 19
1.2.2 監聽模式設計思想 19
1.3 監聽模式的模型抽象 19
1.3.1 代碼框架 19
1.3.2 類圖 20
1.3.3 基於框架的實現 21
1.3.4 模型說明 22
1.4 實戰應用 23
1.5 應用場景 26
第2章 狀態模式 28
2.1 從生活中領悟狀態模式 28
2.1.1 故事劇情—人有少、壯、老,水之固、液、氣 28
2.1.2 用程序來模擬生活 29
2.2 從劇情中思考狀態模式 32
2.2.1 什麼是狀態模式 32
2.2.2 狀態模式設計思想 33
2.3 狀態模式的模型抽象 33
2.3.1 代碼框架 33
2.3.2 類圖 35
2.3.3 基於框架的實現 36
2.3.4 模型說明 38
2.4 應用場景 39
第3章 中介模式 40
3.1 從生活中領悟中介模式 40
3.1.1 故事劇情—找房子問中介 40
3.1.2 用程序來模擬生活 41
3.2 從劇情中思考中介模式 46
3.2.1 什麼是中介模式 46
3.2.2 中介模式設計思想 46
3.3 中介模式的模型抽象 48
3.3.1 代碼框架 48
3.3.2 類圖 49
3.3.3 模型說明 50
3.4 實戰應用 51
3.5 應用場景 56
第4章 裝飾模式 57
4.1 從生活中領悟裝飾模式 57
4.1.1 故事劇情—你想怎麼搭就怎麼搭 57
4.1.2 用程序來模擬生活 58
4.2 從劇情中思考裝飾模式 62
4.2.1 什麼是裝飾模式 62
4.2.2 裝飾模式設計思想 63
4.3 裝飾模式的模型抽象 64
4.3.1 類圖 64
4.3.2 Python中的裝飾器 64
4.3.3 模型說明 69
4.4 應用場景 70
第5章 單例模式 71
5.1 從生活中領悟單例模式 71
5.1.1 故事劇情—你是我的唯一 71
5.1.2 用程序來模擬生活 72
5.2 從劇情中思考單例模式 73
5.2.1 什麼是單例模式 73
5.2.2 單例模式設計思想 73
5.3 單例模式的模型抽象 73
5.3.1 代碼框架 73
5.3.2 類圖 78
5.3.3 基於框架的實現 78
5.4 應用場景 79
第6章 剋隆模式 80
6.1 從生活中領悟剋隆模式 80
6.1.1 故事劇情—給你一個分身術 80
6.1.2 用程序來模擬生活 80
6.2 從劇情中思考剋隆模式 82
6.2.1 什麼是剋隆模式 82
6.2.2 淺拷貝與深拷貝 82
6.3 剋隆模式的模型抽象 86
6.3.1 代碼框架 86
6.3.2 類圖 86
6.3.3 基於框架的實現 87
6.3.4 模型說明 87
6.4 實戰應用 88
6.5 應用場景 90
第7章 職責模式 91
7.1 從生活中領悟職責模式 91
7.1.1 故事劇情—我的假條去哪兒瞭 91
7.1.2 用程序來模擬生活 92
7.2 從劇情中思考職責模式 96
7.2.1 什麼是職責模式 96
7.2.2 職責模式設計思想 96
7.3 職責模式的模型抽象 97
7.3.1 代碼框架 97
7.3.2 類圖 98
7.3.3 基於框架的實現 99
7.3.4 模型說明 102
7.4 應用場景 103
第8章 代理模式 104
8.1 從生活中領悟代理模式 104
8.1.1 故事劇情—幫我拿一下快遞 104
8.1.2 用程序來模擬生活 105
8.2 從劇情中思考代理模式 107
8.2.1 什麼是代理模式 107
8.2.2 代理模式設計思想 107
8.3 代理模式的模型抽象 107
8.3.1 代碼框架 107
8.3.2 類圖 109
8.3.3 基於框架的實現 110
8.3.4 模型說明 111
8.4 應用場景 111
第9章 外觀模式 113
9.1 從生活中領悟外觀模式 113
9.1.1 故事劇情—學妹彆慌,學長幫你 113
9.1.2 用程序來模擬生活 114
9.2 從劇情中思考外觀模式 116
9.2.1 什麼是外觀模式 116
9.2.2 外觀模式設計思想 116
9.3 外觀模式的模型抽象 117
9.3.1 類圖 117
9.3.2 軟件的分層結構 117
9.3.3 模型說明 119
9.4 實戰應用 119
9.5 應用場景 123
第10章 迭代模式 124
10.1 從生活中領悟迭代模式 124
10.1.1 故事劇情—下一個就是你瞭 124
10.1.2 用程序來模擬生活 125
10.2 從劇情中思考迭代模式 128
10.2.1 什麼是迭代模式 128
10.2.2 迭代模式設計思想 129
10.3 迭代模式的模型抽象 130
10.3.1 代碼框架 130
10.3.2 Python中的迭代器 132
10.3.3 類圖 136
10.3.4 模型說明 137
10.4 應用場景 138
第11章 組閤模式 139
11.1 從生活中領悟組閤模式 139
11.1.1 故事劇情—自己組裝電腦,價格再降三成 139
11.1.2 用程序來模擬生活 140
11.2 從劇情中思考組閤模式 146
11.2.1 什麼是組閤模式 146
11.2.2 組閤模式設計思想 147
11.3 組閤模式的模型抽象 148
11.3.1 代碼框架 148
11.3.2 類圖 149
11.3.3 模型說明 150
11.4 實戰應用 150
11.5 應用場景 153
第12章 構建模式 154
12.1 從生活中領悟構建模式 154
12.1.1 故事劇情—你想要一輛車還是一個莊園 154
12.1.2 用程序來模擬生活 155
12.2 從劇情中思考構建模式 157
12.2.1 什麼是構建模式 157
12.2.2 構建模式設計思想 157
12.2.3 與工廠模式的區彆 158
12.2.4 與組閤模式的區彆 158
12.3 構建模式的模型抽象 159
12.3.1 類圖 159
12.3.2 基於框架的實現 160
12.3.3 模型說明 163
12.4 應用場景 164
第13章 適配模式 166
13.1 從生活中領悟適配模式 166
13.1.1 故事劇情——有個轉換器就好瞭 166
13.1.2 用程序來模擬生活 167
13.2 從劇情中思考適配模式 170
13.2.1 什麼是適配模式 170
13.2.2 適配模式設計思想 170
13.3 適配模式的模型抽象 172
13.3.1 代碼框架 172
13.3.2 類圖 172
13.3.3 模型說明 173
13.4 實戰應用 174
13.5 應用場景 184
第14章 策略模式 185
14.1 從生活中領悟策略模式 185
14.1.1 故事劇情—怎麼來不重要,人到就行 185
14.1.2 用程序來模擬生活 186
14.2 從劇情中思考策略模式 188
14.2.1 什麼是策略模式 188
14.2.2 策略模式設計思想 188
14.3 策略模式的模型抽象 189
14.3.1 類圖 189
14.3.2 模型說明 190
14.4 實戰應用 190
14.5 應用場景 195
第15章 工廠模式 196
15.1 從生活中領悟工廠模式 196
15.1.1 故事劇情—你要拿鐵還是摩卡呢 196
15.1.2 用程序來模擬生活 197
15.2 從劇情中思考工廠模式 199
15.2.1 什麼是簡單工廠模式 199
15.2.2 工廠模式設計思想 199
15.3 工廠三姐妹 199
15.3.1 簡單工廠模式 200
15.3.2 工廠方法模式 201
15.3.3 抽象工廠模式 203
15.4 進一步思考 205
15.5 實戰應用 205
第16章 命令模式 209
16.1 從生活中領悟命令模式 209
16.1.1 故事劇情—大閘蟹,走起 209
16.1.2 用程序來模擬生活 210
16.2 從劇情中思考命令模式 213
16.2.1 什麼是命令模式 213
16.2.2 命令模式設計思想 213
16.3 命令模式的模型抽象 214
16.3.1 代碼框架 214
16.3.2 類圖 215
16.3.3 模型說明 216
16.4 實戰應用 216
16.5 應用場景 224
第17章 備忘模式 225
17.1 從生活中領悟備忘模式 225
17.1.1 故事劇情—好記性不如爛筆頭 225
17.1.2 用程序來模擬生活 226
17.2 從劇情中思考備忘模式 228
17.2.1 什麼是備忘模式 228
17.2.2 備忘模式設計思想 229
17.3 備忘模式的模型抽象 229
17.3.1 類圖 229
17.3.2 代碼框架 230
17.3.3 模型說明 232
17.4 實戰應用 232
17.5 應用場景 235
第18章 享元模式 236
18.1 從生活中領悟享元模式 236
18.1.1 故事劇情—顔料很貴,必須充分利用 236
18.1.2 用程序來模擬生活 237
18.2 從劇情中思考享元模式 239
18.2.1 什麼是享元模式 239
18.2.2 享元模式設計思想 239
18.3 享元模式的模型抽象 239
18.3.1 類圖 239
18.3.2 基於框架的實現 240
18.3.3 模型說明 242
18.4 應用場景 243
第19章 訪問模式 244
19.1 從生活中領悟訪問模式 244
19.1.1 故事劇情—一韆個讀者一韆個哈姆雷特 244
19.1.2 用程序來模擬生活 245
19.2 從劇情中思考訪問模式 246
19.2.1 什麼是訪問模式 246
19.2.2 訪問模式設計思想 247
19.3 訪問模式的模型抽象 247
19.3.1 代碼框架 247
19.3.2 類圖 248
19.3.3 基於框架的實現 249
19.3.4 模型說明 250
19.4 實戰應用 251
19.5 應用場景 255
第20章 其他經典設計模式 256
20.1 模闆模式 256
20.1.1 模式定義 256
20.1.2 類圖結構 257
20.1.3 代碼框架 257
20.1.4 應用案例 259
20.1.5 應用場景 261
20.2 橋接模式 261
20.2.1 模式定義 261
20.2.2 類圖結構 261
20.2.3 應用案例 262
20.2.4 應用場景 266
20.3 解釋模式 266
20.3.1 模式定義 266
20.3.2 類圖結構 266
20.3.3 應用案例 267
20.3.4 應用場景 271
進 階 篇
第21章 深入解讀過濾器模式 274
21.1 從生活中領悟過濾器模式 274
21.1.1 故事劇情—製作一杯鮮純細膩的豆漿 274
21.1.2 用程序來模擬生活 275
21.2 從劇情中思考過濾器模式 275
21.2.1 過濾器模式 276
21.2.2 與職責模式的聯係 276
21.3 過濾器模式的模型抽象 276
21.3.1 代碼框架 277
21.3.2 類圖 278
21.3.3 基於框架的實現 278
21.3.4 模型說明 279
21.4 實戰應用 280
21.5 應用場景 282
第22章 深入解讀對象池技術 283
22.1 從生活中領悟對象池技術 283
22.1.1 故事劇情—共享讓齣行更便捷 283
22.1.2 用程序來模擬生活 284
22.2 從劇情中思考對象池機製 287
22.2.1 什麼是對象池 287
22.2.2 與享元模式的聯係 287
22.3 對象池機製的模型抽象 288
22.3.1 代碼框架 288
22.3.2 類圖 291
22.3.3 基於框架的實現 292
22.3.4 模型說明 294
22.4 應用場景 295
第23章 深入解讀迴調機製 296
23.1 從生活中領悟迴調機製 296
23.1.1 故事劇情—把你的技能亮齣來 296
23.1.2 用程序來模擬生活 296
23.2 從劇情中思考迴調機製 298
23.2.1 迴調機製 298
23.2.2 設計思想 299
23.3 迴調機製的模型抽象 299
23.3.1 麵嚮過程的實現方式 299
23.3.2 麵嚮對象的實現方式 300
23.3.3 模型說明 301
23.4 實戰應用 302
23.4.1 基於迴調函數的實現 302
23.4.2 基於策略模式的實現 303
23.4.3 迴調在異步中的應用 307
23.5 應用場景 310
第24章 深入解讀MVC模式 311
24.1 從生活中領悟MVC模式 311
24.1.1 故事劇情—定格最美的一瞬間 311
24.1.2 用程序來模擬生活 312
24.2 從劇情中思考MVC模式 316
24.2.1 MVC模式 317
24.2.2 與中介模式的聯係 317
24.2.3 與外觀模式的聯係 317
24.3 MVC模式的模型抽象 318
24.3.1 MVC 318
24.3.2 MVP 318
24.3.3 MVVM 319
24.3.4 模型說明 320
24.4 應用場景 320
經 驗 篇
第25章 關於設計模式的理解 324
25.1 眾多書籍之下為何還要寫此書 324
25.2 設計模式玄嗎 324
25.3 如何區分不同的模式 325
25.4 編程思想的三重境界 325
第26章 關於設計原則的思考 327
26.1 SOLID原則 327
26.1.1 單一職責原則 327
26.1.2 開放封閉原則 331
26.1.3 裏氏替換原則 334
26.1.4 依賴倒置原則 337
26.1.5 接口隔離原則 341
26.2 是否一定要遵循這些設計原則 348
26.2.1 軟件設計是一個逐步優化的過程 348
26.2.2 不是一定要遵循這些設計原則 349
26.3 更為實用的設計原則 349
26.3.1 LoD原則(Law of Demeter) 349
26.3.2 KISS原則(Keep It Simple and Stupid) 350
26.3.3 DRY原則(Don’t Repeat Yourself) 351
26.3.4 YAGNI原則(You Aren't Gonna Need It) 353
26.3.5 Rule Of Three原則 353
26.3.6 CQS原則(Command-Query Separation) 354
第27章 關於項目重構的思考 355
27.1 什麼叫重構 355
27.2 為何要重構 355
27.3 什麼時機進行重構 356
27.4 如何重構代碼 357
27.4.1 重命名 357
27.4.2 函數重構 358
27.4.3 重新組織數據 359
27.4.4 用設計模式改善代碼設計 360
27.5 代碼整潔之道 360
27.5.1 命名的學問 360
27.5.2 整潔代碼的案例 362
附錄A 23種經典設計模式的索引對照錶 368
附錄B Python中__new__、__init__和__call__的用法 370
附錄C Python中metaclass的原理 377
· · · · · · (
收起)