分類
行為型模式。
這個模式在解決什麼
命令模式要解決的是「請求本身需要被管理」的問題。當一個動作不只是立刻執行,而是可能需要排隊、撤銷、延後、重播或記錄時,把它直接寫成普通函數調用就不夠用了。
核心做法
它會把一次操作封裝成命令對象。命令對象通常包含:
- 要操作的目標
- 執行這個操作所需的資料
- 執行入口
這樣一來,調用者就不需要知道底層細節,只要收集並安排命令即可。
什麼時候適合用
下面幾類場景很典型:
- 需要把操作排成隊列依次執行
- 需要支持撤銷 / 重做
- 需要把操作記錄下來,日後重播
- 想把「發出請求的人」與「真正執行請求的人」解耦
例子
回合制遊戲裡,玩家可能在很短時間內連續打出多張手牌。玩家不會等到場上角色把所有動畫播完才做下一步輸入,所以系統需要把這些行動暫存起來,再按照自己的節奏逐條執行。
這時就可以把每次出牌封裝成一個命令對象,放進命令隊列裡。玩家只負責提交命令,遊戲流程則負責控制它們何時被真正執行。
類圖

這一篇先記住的重點
- 命令模式的核心不是「調用方法」,而是「把請求本身變成對象」
- 一旦請求被物件化,就能做排隊、撤銷、記錄與重播
- 它很適合節奏與執行時機不完全由輸入方決定的系統
參考書目
《Head First Design Patterns》Eric Freeman, Elisabeth Robson, Kathy Sierra, Bert Bates