概述#
Behavioral pattern 關注的是演算法與物件之間的職責分配。它描述的不只是 object 或 class 的結構,更是它們之間的通訊模式(communication pattern)。這些 pattern 刻畫了執行期難以追蹤的複雜控制流,讓你的注意力從控制流轉移到物件之間的互連方式。
根據使用機制的不同,可分為兩類:
- Behavioral class pattern:使用繼承在 class 之間分配行為
- Behavioral object pattern:使用物件組合而非繼承
Class Pattern#
- Template Method:在抽象 class 中定義演算法的骨架,將各步驟延遲到子類別實作。這是最簡單也最常見的 behavioral class pattern
- Interpreter:將文法表示為 class 階層,並在這些 class 的實例上實作直譯器操作
Object Pattern#
協作型(Peer Cooperation)#
這類 pattern 描述一群對等物件如何協作完成單一物件無法獨立完成的任務。關鍵議題是物件之間如何知道彼此:
- Mediator:引入一個中介者物件,避免對等物件之間直接參照,提供鬆耦合所需的間接層
- Chain of Responsibility:提供更鬆散的耦合——透過一條候選物件鏈隱式傳遞請求,任何候選者都可依據執行期條件處理請求
- Observer:定義並維護物件之間的依賴關係,當一個物件狀態改變時通知所有相依物件。經典範例是 Smalltalk MVC 中 Model 與 View 的關係
封裝型(Encapsulating Behavior)#
這類 pattern 將行為封裝在物件中並委託請求:
- Strategy:將演算法封裝在物件中,使演算法可以輕易替換
- Command:將請求封裝為物件,使其可作為參數傳遞、儲存在歷史記錄中、或進行其他操作
- State:封裝物件的狀態,讓物件在 state object 改變時能改變行為
- Visitor:封裝原本分散在多個 class 中的行為
- Iterator:抽象化存取與遍歷 aggregate 中物件的方式
Behavioral pattern 之間經常互相搭配使用。例如 Visitor 可以搭配 Composite 遍歷樹狀結構、Iterator 常用於 Composite 的子元素遍歷、Observer 常與 Mediator 搭配管理事件通知。各 pattern 的詳細說明請見子章節。