命令模式

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

模式概述

  • 解决问题:在软件系统中,行为请求者与行为实现者通常是一种紧耦合的关系,但某些场合,比如需要对行为进行记录、撤销或重做、事务等处理时,这种无法抵御变化的紧耦合的设计就不太合适。
  • 何时使用:在某些场合,比如要对行为进行"记录、撤销/重做、事务"等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将"行为请求者"与"行为实现者"解耦?将一组行为抽象为对象,可以实现二者之间的松耦合。
  • 如何解决:通过调用者调用接受者执行命令,顺序:调用者→接受者→命令。
  • 核心代码:定义三个角色:1、received 真正的命令执行对象 2、Command 3、invoker 使用命令对象的入口
  • 应用实例

  • 优点
    • 降低耦合度
    • 新的命令可以很容易添加到系统中去
  • 缺点
    • 使用命令模式可能会导致某些系统有过多的具体命令类
  • 使用场景
    • 认为是命令的地方都可以使用命令模式
      • GUI 中每一个按钮都是一条命令
      • 模拟 CMD

模式结构

职责链模式包含如下角色:

  • Command(抽象命令类):
  • ConcreteCommand(具体命令类):
  • Invoker(调用者):
  • Receiver(接收者):
  • Client(客户类):