定义

将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。支持可撤销的操作。

特点

  1. 将发出请求的对象和执行请求的对象解耦。

  2. 通过command对象连接请求调用者与被调用者。

  3. 通过setCommand()方法改变调用者具体的执行体。

  4. 不同的command对象可以拥有不同的执行实体。

  5. 宏命令方式可以动态处理一系列的请求。

  6. 支持undo撤销。

实际中的应用

  1. 事务:借助堆栈来记录操作过程,然后逐一回滚到checkpoint

  2. 日志系统:如数据库的binlog,如果每一个操作都要备份整个数据库这工作量太大了。不妨记录日志,还原时可以从上个备份点开始逐一执行日志记录的动作。

  3. 线程池:将命令放入队列,线程池中的固定数量线程去队列里消费。

举例

场景

一个码农拥有一个音乐播放器和一台MacbookPro。它想一键执行或撤销如下等指令:

  • 在MacbookPro上打开网易云音乐客户端

  • 在MacbookPro上打开Chrom

    网友评论