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