物件導向設計模式:可再利用物件導向軟體之要素 封面

物件導向設計模式:可再利用物件導向軟體之要素

👨‍💼: Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides
📅: December 31, 2001
Buy Now
📖:
物件導向設計的奠基之作,由四位作者(Gang of Four)系統化整理 23 種可重用的設計模式,涵蓋創建型、結構型與行為型三大分類,附有完整的意圖、結構與權衡分析。
📘 深度概覽

作者背景#

本書由四位作者合著,業界慣稱 Gang of Four(GoF):Erich Gamma(瑞士計算機科學家,JUnit 共同開發者,曾主導 Eclipse 平台與 Visual Studio Code 的開發)、Richard Helm(澳洲軟體架構師,IBM 資深工程師)、Ralph Johnson(伊利諾大學教授,Smalltalk 社群的重要貢獻者)、John Vlissides(史丹佛大學博士,IBM T.J. Watson 研究中心研究員,已於 2005 年辭世)。四人在 1990 年代初期的 OOPSLA 會議上開始合作,將物件導向社群中反覆出現的設計經驗系統化編目。本書自 1994 年出版以來,已售出超過五十萬冊,是軟體工程領域被引用最多的書籍之一。

完整摘要#

全書以 Christopher Alexander 的建築模式語言為啟發,將設計模式定義為「在特定環境中反覆出現的問題及其核心解法」,並以 Pattern Name、Problem、Solution、Consequences 四要素作為統一的描述框架。

導論以 Smalltalk MVC 架構為範例,展示單一系統中如何同時運用 Observer(Model 與 View 的解耦)、Composite(View 的巢狀組合)與 Strategy(Controller 的行為替換)等多個模式。接著透過文件編輯器(Lexi)的案例研究,從實際設計問題出發導出模式的應用——如何表示文件結構(Composite)、如何支援多種外觀(Abstract Factory)、如何實現撤銷操作(Command)。

23 種模式分為三大類。Creational Patterns(Abstract Factory、Builder、Factory Method、Prototype、Singleton)抽象化物件的實例化過程,封裝具體類別的知識,隱藏實例的建立與組裝方式。其核心主題是讓系統從「依賴具體類別」轉向「依賴抽象介面」。

Structural Patterns(Adapter、Bridge、Composite、Decorator、Facade、Flyweight、Proxy)關注如何將類別和物件組合成更大的結構。Class 層面使用繼承統一介面,Object 層面使用組合實現動態變更。Decorator 與 Composite 都使用遞迴組合,Proxy 與 Decorator 結構相似但意圖不同。

Behavioral Patterns(Chain of Responsibility、Command、Interpreter、Iterator、Mediator、Memento、Observer、State、Strategy、Template Method、Visitor)描述演算法與物件之間的職責分配。它們分為協作型(Mediator 避免直接參照、Chain of Responsibility 隱式傳遞請求、Observer 維護依賴關係)與封裝型(Strategy 封裝演算法、Command 封裝請求、State 封裝狀態轉換)。

結語指出本書並未提出全新的技巧,而是記錄既有的設計經驗——但這種系統化的編目提供了標準化名稱與共同語言,使設計討論能在更高的抽象層次上進行。

本書的貢獻與定位#

GoF 的核心貢獻不在於發明這些模式,而在於建立了物件導向設計的共同詞彙——當一位工程師說「這裡用 Observer」或「把這些 class 做成 Strategy」時,整個團隊立即理解設計意圖。本書也是軟體工程從「個人技藝」邁向「可交流知識體系」的重要里程碑。其兩大設計原則——「面向介面程式設計,而非面向實作」與「優先使用物件組合,而非類別繼承」——至今仍是物件導向設計的核心指導原則。