何時使用命令模式
- 回調替代:面向對象系統中替代傳統函數指標回調
- 請求排隊/不同時機執行:命令物件生命週期獨立於發送者,支援序列化跨機器傳輸
- 支援 Undo/Redo:命令儲存狀態,提供
Undo()/Redo() 恢復/重做
- 日志持久化恢復:系統崩潰後,重讀日志中的命令並重新
Execute() 恢復狀態
- 交易處理:封裝一組資料更新命令,支援新增交易類型
優點
- 新命令易於加入系統
- 接收者可決定否決請求
- 易於設計命令隊列
- 易於實現 Undo/Redo
- 易於記錄命令日志
- 將請求者與執行者解耦
- 命令類別可像普通類別一樣修改擴展
- 支援宏命令(合成模式應用)
缺點
- 可能導致大量具體命令類別(幾十到上千個)
- 某些系統中命令類別爆炸會讓模式變得不切實際
設計建議
命令粒度權衡:輕量命令僅耦合請求者與接收者;重量命令包含完整業務邏輯無需接收者。實務多介於兩者之間,命令動態決定調用哪個接收者。
Undo 實作需儲存:接收者引用、操作參數、接收者初始狀態。多層 Undo 需維護命令歷史清單。