為什麼還需要這本《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# 開發者:把 : 換成 extendsimplements;Java 中所有方法預設皆為 virtual
  • C++ 開發者:Java 物件一律存放在 heap,變數是 reference;用 . 取代 ->,並把宣告中的 * 拿掉

期望讀者帶走什麼#

讀完本書後,你將:

  • 掌握 12 個核心設計模式與 1 個分析用模式
  • 理解模式之間如何互相搭配,建立更穩健的應用程式
  • 具備足夠基礎,能自行閱讀更深入的模式文獻,甚至發現新的模式
  • 學會以新的眼光看待物件導向軟體開發