作 者:譚勇德 著
定 價:118
出 版 社:電子工業出版社
出版日期:2020年08月01日
頁 數:504
裝 幀:平裝
ISBN:9787121392085
★ 讓30W+學員受益的“手寫源碼學習法”開創者★ 影響100W+程序員的“Java架構師成長路徑”制定人★ 暢銷書《Spring 5核心原理與30個類手寫實戰》作者★ 暢銷書《Netty 4核心原理與手寫RPC框架實戰》作者★ 多年“踩坑填坑”和“教學答疑”經驗總結★ 基於經典框架源碼和真實業務場景講設計模式★ 含JDK、Spring、MyBatis、Tomcat、Netty等源碼★ 讓設計模式從經典應用中來再到真實實踐中去真正落地★ 如果你已經有編程經驗,那麼等
●第1篇 軟件設計前奏篇
第1章 重新認識UML 2
1.1 UML的定義 2
1.2 UML應用場景 2
1.3 UML基本構件簡介 3
1.3.1 事物 3
1.3.2 關繫 5
1.3.3 圖 6
第2章 設計模式常用的UML圖 7
2.1 類圖 7
2.1.1 繼承關繫 8
2.1.2 實現關繫 8
2.1.3 組合關繫 9
2.1.4 聚合關繫 10
2.1.5 關聯關繫 11
2.1.6 依賴關繫 12
2.1.7 類關繫記憶技巧 14
2.2 時序圖 15
2.2.1 時序圖的作用 15
2.2.2 時序素 16
2.2.3 時序圖組合片段 17
2.2.4 時序圖畫法及應用實踐 19
第3章 七大軟件架構設計原則 22
3.1 開閉原則 22
3.1.1 開閉原則的定義 22
3.1.2 使用開閉原則解決實際問題 23
3.2 依賴倒置原則 24
3.2.1 依賴倒置原則的定義 24
3.2.2 使用依賴倒置原則解決實際問題 25
3.3 單一職責原則 28
3.3.1 單一職責原則的定義 28
3.3.2 使用單一職責原則解決實際問題 28
3.4 接口隔離原則 31
3.4.1 接口隔離原則的定義 31
3.4.2 使用接口隔離原則解決實際問題 31
3.5 迪米特法則 33
3.5.1 迪米特法則的定義 33
3.5.2 使用迪米特法則解決實際問題 33
3.6 裡氏替換原則 35
3.6.1 裡氏替換原則的定義 35
3.6.2 使用裡氏替換原則解決實際問題 36
3.7 合成復用原則 40
3.7.1 合成復用原則的定義 40
3.7.2 使用合成復用原則解決實際問題 40
3.8 軟件架構設計原則小結 42
第4章 關於設計模式的那些事兒 43
4.1 本書與GoF的《設計模式》的關繫 43
4.2 為什麼一定要學習設計模式 45
4.2.1 寫出優雅的代碼 45
4.2.2 更好地重構項目 47
4.2.3 經典框架都在用設計模式解決問題 58
第2篇 創建型設計模式
第5章 簡單工廠模式 60
5.1 工廠模式的歷史由來 60
5.2 簡單工廠模式概述 61
5.2.1 簡單工廠模式的定義 61
5.2.2 簡單工廠模式的應用場景 61
5.2.3 簡單工廠模式的UML類圖 61
5.2.4 簡單工廠模式的通用寫法 62
5.3 使用簡單工廠模式封裝產品創建細節 63
5.4 簡單工廠模式在框架源碼中的應用 66
5.4.1 簡單工廠模式在JDK源碼中的應用 66
5.4.2 簡單工廠模式在Logback源碼中的應用 67
5.5 簡單工廠模式擴展 67
5.5.1 簡單工廠模式的優點 67
5.5.2 簡單工廠模式的缺點 67
第6章 工廠方法模式 68
6.1 工廠方法模式概述 68
6.1.1 工廠方法模式的定義 68
6.1.2 工廠方法模式的應用場景 69
6.1.3 工廠方法模式的UML類圖 69
6.1.4 工廠方法模式的通用寫法 70
6.2 使用工廠方法模式實現產品擴展 71
6.3 工廠方法模式在Logback源碼中的應用 72
6.4 工廠方法模式擴展 73
6.4.1 工廠方法模式的優點 73
6.4.2 工廠方法模式的缺點 73
第7章 抽像工廠模式 74
7.1 抽像工廠模式概述 74
7.1.1 抽像工廠模式的定義 74
7.1.2 關於產品等級結構和產品族 75
7.1.3 抽像工廠模式的應用場景 76
7.1.4 抽像工廠模式的UML類圖 76
7.1.5 抽像工廠模式的通用寫法 76
7.2 使用抽像工廠模式解決實際問題 78
7.2.1 使用抽像工廠模式支持產品擴展 78
7.2.2 使用抽像工廠模式重構數據庫連接池 81
7.3 抽像工廠模式在Spring源碼中的應用 88
7.4 抽像工廠模式擴展 89
7.4.1 抽像工廠模式的優點 89
7.4.2 抽像工廠模式的缺點 90
第8章 單例模式 91
8.1 單例模式概述 91
8.1.1 單例模式的定義 91
8.1.2 單例模式的應用場景 91
8.1.3 單例模式的UML類圖 92
8.1.4 單例模式的通用寫法 92
8.2 使用單例模式解決實際問題 93
8.2.1 餓漢式單例寫法的弊端 93
8.2.2 還原線程破壞單例的事故現場 93
8.2.3 雙重檢查鎖單例寫法閃亮登場 97
8.2.4 看似完美的靜態內部類單例寫法 100
8.2.5 還原反射破壞單例模式的事故現場 101
8.2.6 更加優雅的枚舉式單例寫法問世 103
8.2.7 還原反序列化破壞單例模式的事故現場 108
8.2.8 使用容器式單例寫法解決大規模生產單例的問題 114
8.2.9 ThreadLocal單例詳解 115
8.3 單例模式在框架源碼中的應用 116
8.3.1 單例模式在JDK源碼中的應用 116
8.3.2 單例模式在Spring源碼中的應用 117
8.4 單例模式擴展 121
8.4.1 單例模式的優點 121
8.4.2 單例模式的缺點 121
第9章 原型模式 122
9.1 原型模式概述 122
9.1.1 原型模式的定義 122
9.1.2 原型模式的應用場景 123
9.1.3 原型模式的UML類圖 124
9.1.4 原型模式的通用寫法 124
9.2 使用原型模式解決實際問題 126
9.2.1 分析JDK淺克隆API帶來的問題 126
9.2.2 使用序列化實現深克隆 129
9.2.3 還原克隆破壞單例的事故現場 131
9.3 原型模式在框架源碼中的應用 132
9.3.1 原型模式在JDK源碼中的應用 132
9.3.2 原型模式在Spring源碼中的應用 133
9.4 原型模式擴展 134
9.4.1 原型模式的優點 134
9.4.2 原型模式的缺點 134
第10章 建造者模式 135
10.1 建造者模式概述 135
10.1.1 建造者模式的定義 135
10.1.2 建造者模式的應用場景 136
10.1.3 建造者模式的UML類圖 136
10.1.4 建造者模式的通用寫法 137
10.2 使用建造者模式解決實際問題 138
10.2.1 建造者模式的鏈式寫法 138
10.2.2 使用靜態內部類實現建造者模式 140
10.2.3 使用建造者模式動態構建SQL語句 142
10.3 建造者模式在框架源碼中的應用 153
10.3.1 建造者模式在JDK源碼中的應用 153
10.3.2 建造者模式在MyBatis源碼中的應用 154
10.3.3 建造者模式在Spring源碼中的應用 154
10.4 建造者模式擴展 155
10.4.1 建造者模式與工廠模式的區別 155
10.4.2 建造者模式的優點 155
10.4.3 建造者模式的缺點 155
第3篇 結構型設計模式
第11章 代理模式 158
11.1 代理模式概述 158
11.1.1 代理模式的定義 158
11.1.2 代理模式的應用場景 158
11.1.3 代理模式的UML類圖 159
11.1.4 代理模式的通用寫法 159
11.2 使用代理模式解決實際問題 161
11.2.1 從靜態代理到動態代理 161
11.2.2 三層架構中的靜態代理 163
11.2.3 使用動態代理實現無感知切換數據源 168
11.2.4 手寫JDK動態代理核心原理 169
11.2.5 CGLib動態代理API原理分析 176
11.2.6 CGLib和JDK動態代理對比分析 183
11.3 代理模式在框架源碼中的應用 184
11.3.1 代理模式在Spring源碼中的應用 184
11.3.2 代理模式在MyBatis源碼中的應用 185
11.4 代理模式擴展 189
11.4.1 靜態代理和動態代理的區別 189
11.4.2 代理模式的優點 189
11.4.3 代理模式的缺點 190
第12章 門面模式 191
12.1 門面模式概述 191
12.1.1 門面模式的定義 191
12.1.2 門面模式的應用場景 191
12.1.3 門面模式的UML類圖 192
12.1.4 門面模式的通用寫法 193
12.2 使用門面模式整合已知API的功能 194
12.3 門面模式在框架源碼中的應用 196
12.3.1 門面模式在Spring源碼中的應用 196
12.3.2 門面模式在MyBatis源碼中的應用 198
12.3.3 門面模式在Tomcat源碼中的應用 199
12.4 門面模式擴展 200
12.4.1 門面模式的優點 200
12.4.2 門面模式的缺點 200
第13章 裝飾器模式 201
13.1 裝飾器模式概述 201
13.1.1 裝飾器模式的定義 201
13.1.2 裝飾器模式的應用場景 201
13.1.3 裝飾器模式的UML類圖 202
13.1.4 裝飾器模式的通用寫法 203
13.2 使用裝飾器模式解決實際問題 205
13.2.1 使用裝飾器模式解決煎餅“加碼”問題 205
13.2.2 使用裝飾器模式擴展日志格式輸出 209
13.3 裝飾器模式在框架源碼中的應用 212
13.3.1 裝飾器模式在JDK源碼中的應用 212
13.3.2 裝飾器模式在Spring源碼中的應用 212
13.3.3 裝飾器模式在MyBatis源碼中的應用 213
13.4 裝飾器模式擴展 213
13.4.1 裝飾器模式與代理模式的區別 213
13.4.2 裝飾器模式的優點 214
13.4.3 裝飾器模式的缺點 214
第14模式 215
14.模式概述 215
14.1.模式的定義 215
14.1.模式的應用場景 216
14.1.模式的UML類圖 216
14.1.模式的通用寫法 217
14.2 模式解決實際問題 218
14.2.1 模式實現資源共享池 218
14.2.2 模式實現數據庫連接池 220
14.模式在框架源碼中的應用 222
14.3.模式在JDK源碼中的應用 222
14.3.模式在Apache Pool源碼中的應用 224
14.模式擴展 225
14.4.模式的內部狀態和外部狀態 225
14.4.模式的優點 226
14.4.模式的缺點 226
第15章 組合模式 227
15.1 組合模式概述 227
15.1.1 組合模式的定義 227
15.1.2 組合模式的應用場景 228
15.1.3 透明組合模式的UML類圖及通用寫法 229
15.1.4 安全組合模式的UML類圖及通用寫法 232
15.2 使用組合模式解決實際問題 233
15.2.1 使用透明組合模式實現課程目錄結構 233
15.2.2 使用安全組合模式實現無限級文件繫統 237
15.3 組合模式在框架源碼中的應用 240
15.3.1 組合模式在JDK源碼中的應用 240
15.3.2 組合模式在MyBatis源碼中的應用 243
15.4 組合模式擴展 244
……
本書從軟件架構設計推薦的通用技能UML開始,重點介紹常用的類圖和時序圖;然後介紹軟件架構設計常用的七大原則;接著結合JDK、Spring、MyBatis、Tomcat、Netty等經典框架源碼對GoF的23種設計模式展開分析,並結合作者多年“踩坑填坑”和“教學答疑”經驗,用深刻、全面、通俗、生動、有趣、接地氣的方式結合真實業務場景分析每種設計模式,治愈“設計模式選擇困難癥”;之後介紹4種常用的新設計模式;最後總結軟件架構、設計模式與應用框架之間的區別。如果你已經有編程經驗,那麼你一定要學一遍設計模式;如果你是資深工程師或者架構師,那麼本書將顛覆你以前的認知;如果你覺得設計模式晦澀難懂,那麼本書一定能讓你醍醐灌頂;如果你看框架源碼總是力不從心,那麼本書就是“內功心法”。
譚勇德 著
譚勇德(Tom) 咕泡學院聯合創始人。“手寫源碼學習法”開創者、“Java架構師成長路徑”制定人、“程序員職業成長路線圖”制定者,Java架構師講師。著有暢銷書《Spring 5核心原理與30個類手寫實戰》《Netty 4核心原理與手寫RPC框架實戰》。 10餘年Java從業經驗,在大型IT公司擔任過CTO、繫統架構師。精通Java、JS、CSS、AS、PHP等;負責過多個大型分布式繫統的微服務架構的技術改造;多年來對主流技術框架有深入研究及獨特見解;開發過多套企業內部UI框架和ORM框架;熱衷於分享經驗,共同進步。 格言:不隻做一個技術者,更要做一個思考者。