Command Pattern (命令模式) (Action) (Transaction)
命令模式是一種行為設計模式,可將請求封裝成物件,讓你可以將請求、佇列或紀錄等物件參數化,並支援可復原的的操作
命令模式結構

命令模式的應用場景
- 如果需要把動作變成參數化對象
命令模式可將特定的方法轉化成獨立對象。你可以將命令作為方法的參數進行傳遞,將命令保存在其他對象中,或是在執行期切換已連接的命令。
- 如果想要將動作放入隊列中、動作的執行或遠程執行動作
同其他對象一樣,命令也可以實現序列化,從而方便的寫入文件或數據庫中。一段時間後,再將他恢復成最初的命令對象。因此,可以延遲或計劃命令的執行。也可以將命令放入隊列、紀錄命令、通過網路傳送命令。
- 如果你想要實現操作回滾功能
盡管有很多方法可以實現撤銷和恢復功能,但命令模式是其中常用的一種。 為了能夠回滾操作,你需要實現已執行操作的歷史紀錄功能。對所有已執行命令對象及其相關程序狀態備份的 stack 結構,但是這種方法有兩個缺點。
-
程式狀態的保存功能並不容易實現,因為部分狀態為私有。可以使用備忘錄模式來在一定程度上解決這個問題。
-
備份狀態可能會占用大量內存。有時需要借助另一種實現方式:反向操作。反向操作也有代價:他可能會很難甚至無法實現。
-
使用時機
- 想參數化請求『欲執行的任務』時
- 依不同時間或佇列執行命令時
- 發送訊息者與接收執行者的生命週期不同時
- 讓執行的任務具有復原或日誌功能時
- 實作交易(Transaction)功能時