命令模式(Command)


目的
将请求封装为对象,从而允许您使用不同的请求,队列或日志请求参数化客户端,并支持可撤销操作。

适用场景

  • 通过要执行的操作来参数化对象。您可以使用回调函数在过程语言中表达此类参数化,也就是说,也就是说,在某处注册了一个函数,稍后再调用它。命令是面向对象的回调替换。
  • 在不同时间指定,排队和执行请求。Command对象的生命周期可以独立于原始请求。如果请求的接收者可以以独立于地址空间的方式表示,那么您可以将请求的命令对象传输到另一个进程并在那里完成请求
  • 支持撤消。命令的执行操作可以存储状态,以便在命令本身中反转其效果。命令接口必须有一个已添加的unexecute操作,该操作可反转上一个要执行的调用的效果。执行的命令存储在历史列表中。通过遍历此列表并分别转发调用unexecute和execute来实现无限级别的撤销和重做
  • 支持日志记录更改,以便在系统崩溃时可以重新应用它们。通过使用加载和存储操作扩充Command接口,您可以保留持久的变更日志。从崩溃中恢复需要从磁盘重新加载记录的命令,然后使用执行操作重新执行这些命令。
  • 基于基本操作构建高级操作系统。这种结构在支持事务的信息系统中很常见。事务封装了一组对数据的更改。Command模式提供了一种事务建模的方法。Command有一个通用接口,允许您以相同的方式调用所有事务。该模式还可以使用新事务扩展系统。