设计模式 命令模式

定义

将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。
命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式

动机目的

命令模式可以对发送者和接收者完全解耦,发送者与接收者之间没有直接引用关系,发送请求的对象只需要知道如何发送请求,而不必知道如何完成请求。这就是命令模式的模式动机

本质

本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开。命令模式使请求本身成为一个对象,这个对象和其他对象一样可以被存储和传递

 

类图

 

 优点

  1. 降低系统的耦合度
  2. 新的命令可以很容易地加入到系统中
  3. 可以比较容易地设计一个命令队列和宏命令(组合命令)
  4. 可以方便地实现对请求的Undo和Redo

缺点

使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。

 

适用环境

  1. 系统需要将请求调用者和请求接收者解耦,使得调用者和接收者不直接交互
  2. 系统需要在不同的时间指定请求、将请求排队和执行请求
  3. 系统需要支持命令的撤销(Undo)操作和恢复(Redo)操作
  4. 系统需要将一组操作组合在一起,即支持宏命令

要点:

1)命令模式将发出请求的对象和执行请求的对象解耦。

2)在被解耦的两者之间通过命令对象进行沟通,命令对象封装了接受者和一个或一组动作。

3)调用者通过调用命令对象的Excute()发出请求,这会使得接受者的动作被调用。

4)调用者可以接受命令当作参数,甚至在运行时动态进行。

5)命令支持撤销,做法是实现undo()方法来回倒Excute()被执行前的状态。

6)宏命令是命令的一种简单延伸,允许调用多个命令。支持撤销。

原文地址:https://www.cnblogs.com/fmys/p/8479225.html