定義
將“請求”封裝成對象,以便使用不同的請求、隊列或者日志來參數化其他對象。支持可撤銷的操作。
特點
將發(fā)出請求的對象和執(zhí)行請求的對象解耦。
通過command對象連接請求調用者與被調用者。
通過setCommand()方法改變調用者具體的執(zhí)行體。
不同的command對象可以擁有不同的執(zhí)行實體。
宏命令方式可以動態(tài)處理一系列的請求。
支持undo撤銷。
實際中的應用
事務:借助堆棧來記錄操作過程,然后逐一回滾到checkpoint
日志系統(tǒng):如數據庫的binlog,如果每一個操作都要備份整個數據庫這工作量太大了。不妨記錄日志,還原時可以從上個備份點開始逐一執(zhí)行日志記錄的動作。
線程池:將命令放入隊列,線程池中的固定數量線程去隊列里消費。
舉例
場景
一個碼農擁有一個音樂播放器和一臺MacbookPro。它想一鍵執(zhí)行或撤銷如下等指令:
在MacbookPro上打開網易云音樂客戶端
在MacbookPro上打開Chrom