設計模式就該這樣學:基於經典框架源碼和真實業務場景
譚勇德(Tom)
- 出版商: 電子工業
- 出版日期: 2020-07-01
- 售價: $708
- 貴賓價: 9.5 折 $673
- 語言: 簡體中文
- 頁數: 504
- 裝訂: 平裝
- ISBN: 7121392089
- ISBN-13: 9787121392085
-
相關分類:
Design Pattern
立即出貨 (庫存 < 4)
買這商品的人也買了...
-
$480$374 -
$420$357 -
$480$317 -
$352大話代碼架構 (項目實戰版)
-
$534$507 -
$414$393 -
$602Spring5 核心原理與 30個類手寫實戰
-
$474$450 -
$580$458 -
$1,710$1,620 -
$580$458 -
$2,166$2,052 -
$439數據中台架構 — 企業數據化最佳實踐
-
$500$390 -
$403RocketMQ 分佈式消息中間件:核心原理與最佳實踐
-
$680$537 -
$414$393 -
$550$429 -
$500$390 -
$480$317 -
$458你真的會寫代碼嗎
-
$580$458 -
$708$673 -
$780$616 -
$600$468
相關主題
商品描述
本書從軟件架構設計必備的通用技能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框架;
熱衷於分享經驗,共同進步。
格言:不只做一個技術者,更要做一個思考者。
目錄大綱
第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.1 享元模式概述 215 14.1.1 享元模式的定義 215 14.1.2 享元模式的應用場景 216 14.1.3 享元模式的UML類圖 216 14.1.4 享元模式的通用寫法 217 14.2 使用享元模式解決實際問題 218 14.2.1 使用享元模式實現資源共享池 218 14.2.2 使用享元模式實現數據庫連接池 220 14.3 享元模式在框架源碼中的應用 222 14.3.1 享元模式在JDK源碼中的應用 222 14.3.2 享元模式在Apache Pool源碼中的應用 224 14.4 享元模式擴展 225 14.4.1 享元模式的內部狀態和外部狀態 225 14.4.2 享元模式的優點 226 14.4.3 享元模式的缺點 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 15.4.1 組合模式的優點 244 15.4.2 組合模式的缺點 244 第16章 適配器模式 245 16.1 適配器模式概述 245 16.1.1 適配器模式的定義 245 16.1.2 適配器模式的應用場景 246 16.1.3 類適配器的UML類圖及通用寫法 246 16.1.4 對象適配器的UML類圖及通用寫法 248 16.1.5 接口適配器的UML類圖及通用寫法 249 16.2 使用適配器模式解決實際問題 251 16.2.1 使用類適配器重構第三方登錄自由適配 251 16.2.2 使用接口適配器優化代碼 254 16.3 適配器模式在Spring源碼中的應用 258 16.4 適配器模式擴展 261 16.4.1 適配器模式與裝飾器模式的區別 261 16.4.2 適配器模式的優點 262 16.4.3 適配器模式的缺點 262 第17章 橋接模式 263 17.1 橋接模式概述 263 17.1.1 橋接模式的定義 263 17.1.2 橋接模式的應用場景 263 17.1.3 橋接模式的UML類圖 264 17.1.4 橋接模式的通用寫法 265 17.2 使用橋接模式設計復雜消息系統 266 17.3 橋接模式在JDK源碼中的應用 270 17.4 橋接模式擴展 274 17.4.1 橋接模式的優點 274 17.4.2 橋接模式的缺點 274 第4篇 行為型設計模式 第18章 委派模式 276 18.1 委派模式概述 276 18.1.1 委派模式的定義 276 18.1.2 委派模式的應用場景 276 18.1.3 委派模式的UML類圖 277 18.1.4 委派模式的通用寫法 277 18.2 使用委派模式模擬任務分配場景 278 18.3 委派模式在框架源碼中的應用 280 18.3.1 委派模式在JDK源碼中的應用 280 18.3.2 委派模式在Spring源碼中的應用 282 18.4 委派模式擴展 285 18.4.1 委派模式的優點 285 18.4.2 委派模式的缺點 285 第19章 模板方法模式 286 19.1 模板方法模式概述 286 19.1.1 模板方法模式的定義 286 19.1.2 模板方法模式的應用場景 286 19.1.3 模板方法模式的UML類圖 287 19.1.4 模板方法模式的通用寫法 288 19.2 使用模板方法模式解決實際問題 289 19.2.1 模板方法模式中的鉤子方法 289 19.2.2 使用模板方法模式重構JDBC業務操作 291 19.3 模板方法模式在框架源碼中的應用 295 19.3.1 模板方法模式在JDK源碼中的應用 295 19.3.2 模板方法模式在MyBatis源碼中的應用 295 19.4 模板方法模式擴展 297 19.4.1 模板方法模式的優點 297 19.4.2 模板方法模式的缺點 297 第20章 策略模式 298 20.1 策略模式概述 298 20.1.1 策略模式的定義 298 20.1.2 策略模式的應用場景 298 20.1.3 策略模式的UML類圖 299 20.1.4 策略模式的通用寫法 300 20.2 使用策略模式解決實際問題 301 20.2.1 使用策略模式實現促銷優惠方案選擇 301 20.2.2 使用策略模式重構支付方式選擇場景 304 20.2.3 策略模式和委派模式結合使用 308 20.3 策略模式在框架源碼中的應用 311 20.3.1 策略模式在JDK源碼中的應用 311 20.3.2 策略模式在Spring源碼中的應用 312 20.4 策略模式擴展 314 20.4.1 策略模式的優點 314 20.4.2 策略模式的缺點 315 第21章 責任鏈模式 316 21.1 責任鏈模式概述 316 21.1.1 責任鏈模式的定義 316 21.1.2 責任鏈模式的應用場景 316 21.1.3 責任鏈模式的UML類圖 317 21.1.4 責任鏈模式的通用寫法 318 21.2 使用責任鏈模式解決實際問題 319 21.2.1 使用責任鏈模式設計熱插拔權限控制 319 21.2.2 責任鏈模式和建造者模式結合使用 323 21.3 責任鏈模式在框架源碼中的應用 324 21.3.1 責任鏈模式在JDK源碼中的應用 324 21.3.2 責任鏈模式在Netty源碼中的應用 326 21.4 責任鏈模式擴展 328 21.4.1 責任鏈模式的優點 328 21.4.2 責任鏈模式的缺點 328 第22章 迭代器模式 329 22.1 迭代器模式概述 329 22.1.1 迭代器模式的定義 329 22.1.2 迭代器模式的應用場景 329 22.1.3 迭代器模式的UML類圖 330 22.1.4 迭代器模式的通用寫法 331 22.2 手寫自定義的集合迭代器 332 22.3 迭代器模式在框架源碼中的應用 336 22.3.1 迭代器模式在JDK源碼中的應用 336 22.3.2 迭代器模式在MyBatis源碼中的應用 338 22.4 迭代器模式擴展 338 22.4.1 迭代器模式的優點 338 22.4.2 迭代器模式的缺點 338 第23章 命令模式 339 23.1 命令模式概述 339 23.1.1 命令模式的定義 339 23.1.2 命令模式的應用場景 340 23.1.3 命令模式的UML類圖 340 23.1.4 命令模式的通用寫法 341 23.2 使用命令模式重構播放器控制條 342 23.3 命令模式在框架源碼中的應用 345 23.3.1 命令模式在JDK源碼中的應用 345 23.3.2 命令模式在JUnit源碼中的應用 346 23.4 命令模式擴展 346 23.4.1 命令模式的優點 346 23.4.2 命令模式的缺點 347 第24章 狀態模式 348 24.1 狀態模式概述 348 24.1.1 狀態模式的定義 348 24.1.2 狀態模式的應用場景 348 24.1.3 狀態模式的UML類圖 349 24.1.4 狀態模式的通用寫法 350 24.2 使用狀態模式解決實際問題 352 24.2.1 使用狀態模式實現登錄狀態自由切換 352 24.2.2 使用狀態機實現訂單狀態流轉控制 355 24.3 狀態模式在JSF源碼中的應用 361 24.4 狀態模式擴展 362 24.4.1 狀態模式與責任鏈模式的區別 362 24.4.2 狀態模式與策略模式的區別 362 24.4.3 狀態模式的優點 362 24.4.4 狀態模式的缺點 363 第25章 備忘錄模式 364 25.1 備忘錄模式概述 364 25.1.1 備忘錄模式的定義 364 25.1.2 備忘錄模式的應用場景 365 25.1.3 備忘錄模式的UML類圖 365 25.1.4 備忘錄模式的通用寫法 366 25.2 使用備忘錄模式實現草稿箱功能 368 25.3 備忘錄模式在Spring源碼中的應用 373 25.4 備忘錄模式擴展 375 25.4.1 備忘錄模式的優點 375 25.4.2 備忘錄模式的缺點 375 第26章 中介者模式 376 26.1 中介者模式概述 376 26.1.1 中介者模式的定義 376 26.1.2 中介者模式的應用場景 377 26.1.3 中介者模式的UML類圖 378 26.1.4 中介者模式的通用寫法 379 26.2 使用中介者模式設計群聊場景 381 26.3 中介者模式在JDK源碼中的應用 382 26.4 中介者模式擴展 384 26.4.1 中介者模式的優點 384 26.4.2 中介者模式的缺點 384 第27章 解釋器模式 385 27.1 解釋器模式概述 385 27.1.1 解釋器模式的定義 385 27.1.2 解釋器模式的應用場景 386 27.1.3 解釋器模式的UML類圖 386 27.1.4 解釋器模式的通用寫法 387 27.2 使用解釋器模式解析數學表達式 389 27.3 解釋器模式在框架源碼中的應用 397 27.3.1 解釋器模式在JDK源碼中的應用 397 27.3.2 解釋器模式在Spring源碼中的應用 397 27.4 解釋器模式擴展 398 27.4.1 解釋器模式的優點 398 27.4.2 解釋器模式的缺點 399 第28章 觀察者模式 400 28.1 觀察者模式概述 400 28.1.1 觀察者模式的定義 400 28.1.2 觀察者模式的應用場景 400 28.1.3 觀察者模式的UML類圖 401 28.1.4 觀察者模式的通用寫法 402 28.2 使用觀察者模式解決實際問題 403 28.2.1 基於Java API實現通知機制 403 28.2.2 基於Guava API輕松落地觀察者模式 406 28.2.3 使用觀察者模式設計鼠標事件響應API 406 28.3 觀察者模式在Spring源碼中的應用 412 28.4 觀察者模式擴展 413 28.4.1 觀察者模式的優點 413 28.4.2 觀察者模式的缺點 414 第29章 訪問者模式 415 29.1 訪問者模式概述 415 29.1.1 訪問者模式的定義 415 29.1.2 訪問者模式的應用場景 416 29.1.3 訪問者模式的UML類圖 416 29.1.4 訪問者模式的通用寫法 417 29.2 使用訪問者模式解決實際問題 419 29.2.1 使用訪問者模式實現KPI考核的場景 419 29.2.2 從靜態分派到動態分派 424 29.2.3 訪問者模式中的偽動態分派 425 29.3 訪問者模式在框架源碼中的應用 427 29.3.1 訪問者模式在JDK源碼中的應用 427 29.3.2 訪問者模式在Spring源碼中的應用 428 29.4 訪問者模式擴展 429 29.4.1 訪問者模式的優點 429 29.4.2 訪問者模式的缺點 430 第5篇 設計模式總結篇 第30章 專治設計模式選擇困難症 432 30.1 設計模式到底如何落地 432 30.2 各種設計模式使用頻率總結 435 30.2.1 創建型設計模式 435 30.2.2 結構型設計模式 435 30.2.3 行為型設計模式 436 30.3 一句話歸納設計模式 437 第31章 容易混淆的設計模式對比 439 31.1 創建型設計模式對比 439 31.1.1 工廠方法模式與抽象工廠模式對比 439 31.1.2 簡單工廠模式與單例模式對比 440 31.1.3 簡單工廠模式與建造者模式對比 441 31.2 結構型設計模式對比 441 31.2.1 裝飾器模式與代理模式對比 441 31.2.2 裝飾器模式與門面模式對比 442 31.2.3 裝飾器模式與適配器模式對比 443 31.2.4 適配器模式與代理模式對比 443 31.3 行為型設計模式對比 444 31.3.1 策略模式與模板方法模式對比 444 31.3.2 策略模式與命令模式對比 445 31.3.3 策略模式與委派模式對比 445 31.3.4 橋接模式與適配器模式對比 446 31.3.5 橋接模式與組合模式對比 446 31.4 跨類綜合對比 447 31.4.1 享元模式與容器式單例模式對比 447 31.4.2 建造者模式與裝飾器模式對比 448 31.4.3 策略模式與簡單工廠模式對比 449 31.4.4 策略模式與適配器模式對比 449 31.4.5 中介者模式與適配器模式對比 450 31.4.6 中介者模式與代理模式對比 451 31.4.7 中介者模式與橋接模式對比 451 31.4.8 橋接模式與命令模式對比 452 31.4.9 委派模式與門面模式對比 453 31.4.10 委派模式與代理模式對比 453 第6篇 架構設計擴展篇 第32章 新設計模式 456 32.1 對象池模式 456 32.1.1 對象池模式的定義 456 32.1.2 對象池模式的應用場景 456 32.1.3 對象池模式的UML類圖 457 32.1.4 對象池模式的通用寫法 458 32.1.5 對象池模式的優缺點 459 32.2 規格模式 460 32.2.1 規格模式的定義 460 32.2.2 規格模式的應用場景 460 32.2.3 規格模式的UML類圖 460 32.2.4 規格模式的通用寫法 461 32.2.5 規格模式的優缺點 464 32.3 空對象模式 464 32.3.1 空對象模式的定義 464 32.3.2 空對象模式的應用場景 465 32.3.3 空對象模式的UML類圖 465 32.3.4 空對象模式的通用寫法 466 32.3.5 空對象模式的優缺點 467 32.4 雇工模式 467 32.4.1 雇工模式的定義 467 32.4.2 雇工模式的應用場景 467 32.4.3 雇工模式的UML類圖 468 32.4.4 雇工模式的通用寫法 468 32.4.5 雇工模式的優缺點 469 第33章 軟件架構與設計模式 470 33.1 軟件架構和設計模式的區別 470 33.2 三層架構 471 33.2.1 三層架構概述 471 33.2.2 三層架構的編程模型 471 33.2.3 三層架構的優缺點 472 33.3 ORM架構 473 33.3.1 ORM架構概述 473 33.3.2 ORM架構的編程模型 473 33.3.3 ORM架構的優缺點 474 33.4 MVC架構 474 33.4.1 MVC架構概述 474 33.4.2 MVC架構的編程模型 475 33.4.3 MVC架構的優缺點 476 33.5 RPC架構 477 33.5.1 RPC架構概述 477 33.5.2 RPC架構的編程模型 477 33.5.3 RPC架構的優缺點 478 33.6 未來軟件架構演進之路 478