定義

將“請求”封裝成對象,以便使用不同的請求、隊列或者日志來參數(shù)化其他對象。支持可撤銷的操作。

特點

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

  2. 通過command對象連接請求調(diào)用者與被調(diào)用者。

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

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

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

  6. 支持undo撤銷。

實際中的應用

  1. 事務:借助堆棧來記錄操作過程,然后逐一回滾到checkpoint

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

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

舉例

場景

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

  • 在MacbookPro上打開網(wǎng)易云音樂客戶端

  • 在MacbookPro上打開Chrom

    網(wǎng)友評論