為什麼還需要這本《Design Patterns Explained》?#
設計模式(design patterns)與物件導向程式設計(object-oriented programming)承諾讓軟體開發人員的生活更輕鬆,但要真正學會、用得熟練、理解其背後運作,並不容易。本書由 Alan Shalloway 與 James R. Trott 兩位多年從事教學與顧問工作的作者合著,目標是把設計模式講解得清楚易懂,並讓讀者建立「真正物件導向」的思考方式。
作者強調:物件真正的力量不在於繼承(inheritance),而是在於「行為的封裝(encapsulating behaviors)」。
全書的核心主張#
- 設計模式並非孤立存在,而是彼此交織、共同合作來解決問題
- 學習模式時,光記住一個個結構是不夠的,真正關鍵是模式背後的原則與策略
- 模式同時存在於分析(analysis)、設計(design)與實作(implementation)三個層次
- 即使不直接套用某個具名的模式,內化這些原則也能讓設計能力大幅提升
兩位作者的學習軌跡#
Alan Shalloway:從物件導向到模式,再回到「真正的物件導向」#
- 原本自認為已是物件導向(OO)老手,能設計良好的資料抽象與繼承階層
- 1996 年參加設計模式讀書會後,才意識到自己並未充分發揮 OO 的能力
- 一次設計實戰中,Alan 在散步時頓悟:模式應當被縫合在一起來解決問題,而不是個別套用
- 受 Christopher Alexander 的《The Timeless Way of Building》啟發,理解到模式可協助「理解問題領域」,而不只是設計好之後拿來套用
- 後續將這些經驗融入教學,發展出能讓初學者與資深開發者同時受益的教法
James R. Trott:從人工智慧、KADS 到模式分析#
- 早期在人工智慧領域建構規則式專家系統,逐漸看見「專家行為的重複主題」
- 接觸到歐洲 KADS(Knowledge Analysis and Design Support)方法後,找到結構化的方式來描述這些重複主題
- 將模式應用於分析後,專案時程縮短、與專家溝通更有效率、終端使用者也更易理解系統
第二版有哪些更新?#
第二版不只是小幅修訂,而是反映了作者多年教學與實務後的新體會。
- 章節順序調整:例如把 Strategy 模式移到較前面,幫助學生更早建立模式思考
- 擴充共通與差異分析(Commonality and Variability Analysis, CVA):作為應用架構設計的方法
- 整合敏捷與設計模式:說明 eXtreme Programming(XP)、測試驅動開發(TDD)、Scrum 與設計模式的關聯
- 強調工廠的角色:把工廠(factory)視為物件實例化與管理的關鍵
- 新增 Object Pool 模式:這是 GoF 未涵蓋的模式
- 完整可執行的程式碼範例:以 Java 為主,網站另提供 C# 與 C++ 版本
- 每章新增複習題:協助學生自我檢核
寫作風格與閱讀建議#
- 第一人稱單數敘述:兩位作者協作後決定以「我」呈現,讓敘事更自然
- 方便快速掃讀:大量使用表格、條列、邊欄摘要,每個模式附摘要表
- 重思考勝於實作:刻意避免過早陷入實作細節,因此程式碼範例偏精簡,且不含錯誤檢查
- 強調原則與策略:本書屬入門書籍,幫助讀者建立基礎,再進一步閱讀參考書
閱讀本書時,建議連結自身的開發經驗。當作者提出一個問題時,試著回想自己遇過的類似情境,會讓學習效果倍增。
給不同語言背景讀者的提醒#
書中所有程式碼以 Java 撰寫。對於熟悉其他語言的讀者:
- C# 開發者:把
:換成extends或implements;Java 中所有方法預設皆為 virtual - C++ 開發者:Java 物件一律存放在 heap,變數是 reference;用
.取代->,並把宣告中的*拿掉
期望讀者帶走什麼#
讀完本書後,你將:
- 掌握 12 個核心設計模式與 1 個分析用模式
- 理解模式之間如何互相搭配,建立更穩健的應用程式
- 具備足夠基礎,能自行閱讀更深入的模式文獻,甚至發現新的模式
- 學會以新的眼光看待物件導向軟體開發