定義

將“請(qǐng)求”封裝成對(duì)象,以便使用不同的請(qǐng)求、隊(duì)列或者日志來(lái)參數(shù)化其他對(duì)象。支持可撤銷(xiāo)的操作。

特點(diǎn)

  1. 將發(fā)出請(qǐng)求的對(duì)象和執(zhí)行請(qǐng)求的對(duì)象解耦。

  2. 通過(guò)command對(duì)象連接請(qǐng)求調(diào)用者與被調(diào)用者。

  3. 通過(guò)setCommand()方法改變調(diào)用者具體的執(zhí)行體。

  4. 不同的command對(duì)象可以擁有不同的執(zhí)行實(shí)體。

  5. 宏命令方式可以動(dòng)態(tài)處理一系列的請(qǐng)求。

  6. 支持undo撤銷(xiāo)。

實(shí)際中的應(yīng)用

  1. 事務(wù):借助堆棧來(lái)記錄操作過(guò)程,然后逐一回滾到checkpoint

  2. 日志系統(tǒng):如數(shù)據(jù)庫(kù)的binlog,如果每一個(gè)操作都要備份整個(gè)數(shù)據(jù)庫(kù)這工作量太大了。不妨記錄日志,還原時(shí)可以從上個(gè)備份點(diǎn)開(kāi)始逐一執(zhí)行日志記錄的動(dòng)作。

  3. 線程池:將命令放入隊(duì)列,線程池中的固定數(shù)量線程去隊(duì)列里消費(fèi)。

舉例

場(chǎng)景

一個(gè)碼農(nóng)擁有一個(gè)音樂(lè)播放器和一臺(tái)MacbookPro。它想一鍵執(zhí)行或撤銷(xiāo)如下等指令: