本書專門介紹Android源代碼的設(shè)計(jì)模式, 主要講解面向?qū)ο蟮牧笤瓌t、主流的設(shè)計(jì)模式以及MVC和MVP模式。本書的主要內(nèi)容為: 優(yōu)化代碼的第一步、開閉原則、里氏替換原則、依賴倒置原則、接口隔離原則、迪米特原則、單例模式、Builder模式、原型模式、工廠方法模式、抽象工廠模式、策略模式、狀態(tài)模式、責(zé)任鏈模式、解釋器模式、命令模式、觀察者模式、備忘錄模式、迭代器模式、模板方法模式、訪問者模式、中介者模式、代理模式、組合模式、適配器模式、裝飾模式、享元模式、外觀模式、橋接模式, 以及MVC的介紹與實(shí)戰(zhàn)和MVP應(yīng)用架構(gòu)模式。每個(gè)章節(jié)都對(duì)某個(gè)模式做了深入分析, 并且會(huì)對(duì)模式相關(guān)的技術(shù)點(diǎn)進(jìn)行深入拓展, 讓讀者在掌握模式的同時(shí)學(xué)習(xí)到Android中的一些重要知識(shí), 通過實(shí)戰(zhàn)幫助讀者達(dá)到學(xué)以致用的目的, 且能夠?qū)⒛J竭\(yùn)用于項(xiàng)目中, 開發(fā)出高質(zhì)量的程序。
第1章 走向靈活軟件之路——
面向?qū)ο蟮牧笤瓌t 1
1.1 優(yōu)化代碼的第一步——單一職責(zé)原則 1
1.2 讓程序更穩(wěn)定、更靈活——開閉原則 5
1.3 構(gòu)建擴(kuò)展性更好的系統(tǒng)——
里氏替換原則 12
1.4 讓項(xiàng)目擁有變化的能力——
依賴倒置原則 14
1.5 系統(tǒng)有更高的靈活性——
接口隔離原則 16
1.6 更好的可擴(kuò)展性——迪米特原則 19
1.7 小結(jié) 23
第2章 應(yīng)用最廣的模式——單例模式 24
2.1 單例模式介紹 24
2.2 單例模式的定義 24
2.3 單例模式的使用場(chǎng)景 24
2.4 單例模式UML類圖 24
2.5 單例模式的簡(jiǎn)單示例 25
2.6 單例模式的其他實(shí)現(xiàn)方式 27
2.6.1 懶漢模式 27
2.6.2 Double Check Lock (DCL)實(shí)現(xiàn)
單例 27
2.6.3 靜態(tài)內(nèi)部類單例模式 28
2.6.4 枚舉單例 29
2.6.5 使用容器實(shí)現(xiàn)單例模式 30
2.7 Android源碼中的單例模式 30
2.8 無名英雄——深入理解LayoutInflater 34
2.9 運(yùn)用單例模式 41
2.10 小結(jié) 43
第3章 自由擴(kuò)展你的項(xiàng)目——
Builder模式 44
3.1 Builder模式介紹 44
3.2 Builder模式的定義 44
3.3 Builder模式的使用場(chǎng)景 44
3.4 Builder模式的UML類圖 44
3.5 Builder模式的簡(jiǎn)單實(shí)現(xiàn) 45
3.6 Android源碼中的Builder模式實(shí)現(xiàn) 47
3.7 深入了解WindowManager 53
3.8 Builder模式實(shí)戰(zhàn) 60
3.9 小結(jié) 65
第4章 使程序運(yùn)行更高效——原型模式 66
4.1 原型模式介紹 66
4.2 原型模式的定義 66
4.3 原型模式的使用場(chǎng)景 66
4.4 原型模式的UML類圖 66
4.5 原型模式的簡(jiǎn)單實(shí)現(xiàn) 67
4.6 淺拷貝和深拷貝 69
4.7 Android源碼中的原型模式實(shí)現(xiàn) 72
4.8 Intent的查找與匹配 74
4.8.1 App信息表的構(gòu)建 74
4.8.2 精確匹配 80
4.9 原型模式實(shí)戰(zhàn) 83
4.10 小結(jié) 85
第5章 應(yīng)用最廣泛的模式——
工廠方法模式 87
5.1 工廠方法模式介紹 87
5.2 工廠方法模式的定義 87
5.3 工廠方法模式的使用場(chǎng)景 87
5.4 工廠方法模式的UML類圖 87
5.5 模式的簡(jiǎn)單實(shí)現(xiàn) 90
5.6 Android源碼中的工廠方法模式實(shí)現(xiàn) 93
5.7 關(guān)于onCreate方法 95
5.8 工廠方法模式實(shí)戰(zhàn) 102
5.9 小結(jié) 105
第6章 創(chuàng)建型設(shè)計(jì)模式——
抽象工廠模式 106
6.1 抽象工廠模式介紹 106
6.2 抽象工廠模式的定義 106
6.3 抽象工廠模式的使用場(chǎng)景 106
6.4 抽象工廠模式的UML類圖 106
6.5 抽象工廠方法模式的簡(jiǎn)單實(shí)現(xiàn) 109
6.6 Android源碼中的抽象工廠方法模式
實(shí)現(xiàn) 112
6.7 抽象工廠模式在Android開發(fā)中的
應(yīng)用 116
6.8 小結(jié) 120
第7章 時(shí)勢(shì)造英雄——策略模式 121
7.1 策略模式介紹 121
7.2 策略模式的定義 121
7.3 策略模式的使用場(chǎng)景 121
7.4 策略模式的UML類圖 122
7.5 策略模式的簡(jiǎn)單實(shí)現(xiàn) 122
7.6 Android源碼中的策略模式實(shí)現(xiàn) 127
7.6.1 時(shí)間插值器 127
7.6.2 動(dòng)畫中的時(shí)間插值器 128
7.7 深入屬性動(dòng)畫 132
7.7.1 屬性動(dòng)畫體系的總體設(shè)計(jì) 132
7.7.2 屬性動(dòng)畫的核心類介紹 132
7.7.3 基本使用 133
7.7.4 流程圖 134
7.7.5 詳細(xì)設(shè)計(jì) 135
7.7.6 核心原理分析 135
7.8 策略模式實(shí)戰(zhàn)應(yīng)用 146
7.9 小結(jié) 148
第8章 隨遇而安——狀態(tài)模式 149
8.1 狀態(tài)模式介紹 149
8.2 狀態(tài)模式的定義 149
8.3 狀態(tài)模式的使用場(chǎng)景 149
8.4 狀態(tài)模式的UML類圖 149
8.5 狀態(tài)模式的簡(jiǎn)單示例 150
8.6 Wi-Fi管理中的狀態(tài)模式 154
8.7 狀態(tài)模式實(shí)戰(zhàn) 163
8.8 小結(jié) 168
第9章 使編程更有靈活性——
責(zé)任鏈模式 169
9.1 責(zé)任鏈模式介紹 169
9.2 責(zé)任鏈模式的定義 169
9.3 責(zé)任鏈模式的使用場(chǎng)景 169
9.4 責(zé)任鏈模式的UML類圖 169
9.5 責(zé)任鏈模式的簡(jiǎn)單實(shí)現(xiàn) 174
9.6 Android源碼中的責(zé)任鏈模式實(shí)現(xiàn) 177
9.7 責(zé)任鏈模式實(shí)戰(zhàn) 182
9.8 小結(jié) 185
第10章 化繁為簡(jiǎn)的翻譯機(jī)——
解釋器模式 186
10.1 解釋器模式介紹 186
10.2 解釋器模式的定義 186
10.3 解釋器模式的使用場(chǎng)景 187
10.4 解釋器模式的UML類圖 188
10.5 解釋器模式的簡(jiǎn)單實(shí)現(xiàn) 189
10.6 Android源碼中的解釋器模式實(shí)現(xiàn) 193
10.7 關(guān)于PackageManagerService 199
10.8 小結(jié) 207
第11章 讓程序暢通執(zhí)行——命令模式 208
11.1 命令模式介紹 208
11.2 命令模式的定義 208
11.3 命令模式的使用場(chǎng)景 208
11.4 命令模式的UML類圖 208
11.5 命令模式的簡(jiǎn)單實(shí)現(xiàn) 211
11.6 Android源碼中的命令模式實(shí)現(xiàn) 215
11.7 Android事件輸入系統(tǒng)介紹 218
11.8 命令模式實(shí)戰(zhàn) 220
11.9 小結(jié) 227
第12章 解決解耦的鑰匙——
觀察者模式 228
12.1 觀察者模式介紹 228
12.2 觀察者模式的定義 228
12.3 觀察者模式的使用場(chǎng)景 228
12.4 觀察者模式的UML類圖 228
12.5 觀察者模式的簡(jiǎn)單實(shí)現(xiàn) 229
12.6 Android源碼分析 231
12.7 觀察者模式的深入拓展 234
12.8 實(shí)戰(zhàn) 242
12.9 小結(jié) 249
第13章 編程中的“后悔藥”——
備忘錄模式 251
13.1 備忘錄模式介紹 251
13.2 備忘錄模式的定義 251
13.3 備忘錄模式的使用場(chǎng)景 251
13.4 備忘錄模式的UML類圖 251
13.5 備忘錄模式的簡(jiǎn)單示例 252
13.6 Android源碼中的備忘錄模式 254
13.7 深度拓展 261
13.7.1 onSaveInstanceState調(diào)用的
時(shí)機(jī) 261
13.7.2 使用V4包存儲(chǔ)狀態(tài)的bug 261
13.8 實(shí)戰(zhàn) 264
13.9 小結(jié) 271
第14章 解決問題的“第三者”——
迭代器模式 272
14.1 迭代器模式介紹 272
14.2 迭代器模式的定義 272
14.3 迭代器模式的使用場(chǎng)景 272
14.4 迭代器模式的UML類圖 272
14.5 模式的簡(jiǎn)單實(shí)現(xiàn) 275
14.6 Android源碼中的模式實(shí)現(xiàn) 279
14.7 小結(jié) 281
第15章 抓住問題核心——
模板方法模式 282
15.1 模板方法模式介紹 282
15.2 模板方法模式的定義 282
15.3 模板方法模式的使用場(chǎng)景 282
15.4 模板方法模式的UML類圖 282
15.5 模板方法模式的簡(jiǎn)單示例 283
15.6 Android源碼中的模板方法模式 285
15.7 深度拓展 287
15.8 模板方法實(shí)戰(zhàn) 300
15.9 小結(jié) 303
第16章 訪問者模式 305
16.1 訪問者模式介紹 305
16.2 訪問者模式的定義 305
16.3 訪問者模式的使用場(chǎng)景 305
16.4 訪問者模式的UML類圖 305
16.5 訪問者模式的簡(jiǎn)單示例 306
16.6 Android源碼中的模式 311
16.7 訪問者模式實(shí)戰(zhàn) 314
16.8 小結(jié) 320
第17章 “和事佬”——中介者模式 321
17.1 中介者模式介紹 321
17.2 中介者模式的定義 322
17.3 中介者模式的使用場(chǎng)景 322
17.4 中介者模式的UML類圖 322
17.5 中介者模式的簡(jiǎn)單實(shí)現(xiàn) 324
17.6 Android源碼中的中介者模式實(shí)現(xiàn) 328
17.7 中介者模式實(shí)戰(zhàn) 330
17.8 小結(jié) 333
第18章 編程好幫手——代理模式 334
18.1 代理模式介紹 334
18.2 代理模式的定義 334
18.3 代理模式的使用場(chǎng)景 334
18.4 代理模式的UML類圖 334
18.5 代理模式的簡(jiǎn)單實(shí)現(xiàn) 336
18.6 Android源碼中的代理模式實(shí)現(xiàn) 340
18.7 Android中的Binder跨進(jìn)程通信機(jī)制
與AIDL 344
18.8 代理模式實(shí)戰(zhàn) 355
18.9 小結(jié) 359
第19章 物以類聚——組合模式 360
19.1 組合模式介紹 360
19.2 組合模式的定義 361
19.3 組合模式的使用場(chǎng)景 361
19.4 組合模式的UML類圖 361
19.5 組合模式的簡(jiǎn)單實(shí)現(xiàn) 367
19.6 Android源碼中的模式實(shí)現(xiàn) 371
19.7 為什么ViewGroup有容器的功能 372
19.8 小結(jié) 374
第20章 得心應(yīng)手的“粘合劑”——適配器
模式 375
20.1 適配器模式介紹 375
20.2 適配器模式的定義 375
20.3 適配器模式的使用場(chǎng)景 375
20.4 適配器模式的UML類圖 375
20.5 適配器模式應(yīng)用的簡(jiǎn)單示例 376
20.5.1 類適配器模式 376
20.5.2 對(duì)象適配器模式 377
20.6 Android源碼中的適配器模式 379
20.7 深度拓展 385
20.8 實(shí)戰(zhàn)演示 398
20.9 小結(jié) 407
第21章 裝飾模式 408
21.1 裝飾模式介紹 408
21.2 裝飾模式的定義 408
21.3 裝飾模式的使用場(chǎng)景 408
21.4 裝飾模式的UML類圖 408
21.5 模式的簡(jiǎn)單實(shí)現(xiàn) 411
21.6 Android源碼中的模式實(shí)現(xiàn) 413
21.7 Context與ContextImpl 415
21.8 模式實(shí)戰(zhàn) 423
21.9 小結(jié) 424
第22章 對(duì)象共享,避免創(chuàng)建多對(duì)象——
享元模式 425
22.1 享元模式介紹 425
22.2 享元模式定義 425
22.3 享元模式的使用場(chǎng)景 425
22.4 享元模式的UML類圖 425
22.5 享元模式的簡(jiǎn)單示例 426
22.6 Android源碼中的享元模式 429
22.7 深度拓展 434
22.7.1 深入了解Android的消息
機(jī)制 434
22.7.2 子線程中創(chuàng)建Handler為何會(huì)拋出異!443
22.8 小結(jié) 444
第23章 統(tǒng)一編程接口——外觀模式 445
23.1 外觀模式介紹 445
23.2 外觀模式定義 445
23.3 外觀模式的使用場(chǎng)景 445
23.4 外觀模式的UML類圖 445
23.5 外觀模式的簡(jiǎn)單示例 446
23.6 Android源碼中的外觀模式 448
23.7 深度拓展 452
23.7.1 Android資源的加載與匹配 452
23.7.2 動(dòng)態(tài)加載框架的實(shí)現(xiàn) 459
23.8 外觀模式實(shí)戰(zhàn) 466
23.9 小結(jié) 468
第24章 連接兩地的交通樞鈕——
橋接模式 470
24.1 橋接模式介紹 470
24.2 橋接模式的定義 470
24.3 橋接模式的使用場(chǎng)景 470
24.4 橋接模式的UML類圖 470
24.5 橋接模式的簡(jiǎn)單實(shí)現(xiàn) 472
24.6 Android源碼中的橋接模式實(shí)現(xiàn) 475
24.7 關(guān)于WindowManagerService 476
24.8 橋接模式實(shí)戰(zhàn) 484
24.9 小結(jié) 487
第25章 MVC的介紹與實(shí)戰(zhàn) 488
25.1 MVC的歷史與結(jié)構(gòu)的演化 488
25.2 MVC的應(yīng)用淺析 494
25.3 MVC在Android中的實(shí)現(xiàn) 499
25.4 MVC框架模式與設(shè)計(jì)模式 503
第26章 MVP應(yīng)用架構(gòu)模式 504
26.1 MVP模式介紹 504
26.2 MVP模式的三個(gè)角色 505
26.3 NavigationView中的MVP模式 505
26.4 MVP的實(shí)現(xiàn) 513
26.5 MVP與Activity、Fragment的生命
周期 517
第27章 MVVM應(yīng)用淺析 520
27.1 MVVM模式介紹 520
27.2 MVVM的基本結(jié)構(gòu) 521
27.3 View與ViewModel之間的交互 522
27.4 MVVM在Android中的應(yīng)用與DataBinding使用淺析 523
27.5 MVVM的優(yōu)缺點(diǎn) 530
27.6 MVC、MVP與MVVM的異同 530
27.7 小結(jié) 531
第28章 易混淆的設(shè)計(jì)模式 532
28.1 簡(jiǎn)單工廠、工廠方法、抽象工廠、
Builder模式的區(qū)別 532
28.2 代理與裝飾模式、橋接模式 538
28.3 外觀模式與中介模式 543
28.4 策略與狀態(tài)模式、命令模式 547
28.5 結(jié)束語 553