定义
将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。支持可撤销的操作。
特点
将发出请求的对象和执行请求的对象解耦。
通过command对象连接请求调用者与被调用者。
通过setCommand()方法改变调用者具体的执行体。
不同的command对象可以拥有不同的执行实体。
宏命令方式可以动态处理一系列的请求。
支持undo撤销。
实际中的应用
事务:借助堆栈来记录操作过程,然后逐一回滚到checkpoint
日志系统:如数据库的binlog,如果每一个操作都要备份整个数据库这工作量太大了。不妨记录日志,还原时可以从上个备份点开始逐一执行日志记录的动作。
线程池:将命令放入队列,线程池中的固定数量线程去队列里消费。
举例
场景
一个码农拥有一个音乐播放器和一台MacbookPro。它想一键执行或撤销如下等指令:
在MacbookPro上打开网易云音乐客户端
在MacbookPro上打开Chrom