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