職責鏈模式
定義:使多個對象都有機會處理請求,從而避免請求發送者與接收者的耦合。將對象連成一條鏈,沿鏈傳遞請求,直到有對象處理為止。
核心角色
- Handler(抽象處理者):定義處理請求的介面,持有後繼者引用。
- ConcreteHandler(具體處理者):處理自己負責的請求,否則轉發給後繼者。
- Client(客戶端):發起請求,只需知道鏈頭。
運行流程
- 客戶提交請求 → 鏈頭。
- 請求沿鏈傳遞,直到某
ConcreteHandler 處理它。
- 發送者與接收者無需知曉對方具體信息,鏈中對象只保留後繼者引用。
優缺點
| 優點 | 缺點 |
| 降低耦合:發送者不需知道誰處理 | 請求可能到達鏈尾仍未被處理 |
| 靈活分配職責:可動態增刪/調序處理者 | 若配置不當,請求可能永不被處理 |
| 簡化對象連接:只需維護單向鏈 | 性能開銷:請求需逐級傳遞 |
適用場景
- 多個對象可處理同一請求,具體由誰處理運行時決定。
- 動態指定處理者集合。
- 例如:日誌記錄器鏈、異常處理鏈、Servlet Filter 鏈。
Effective C++ 關鍵條款摘錄
條款 43:處理模板化基類內的名稱
在派生類模板中訪問基類模板的成員,需加 this-> 或 基類名限定: