设计模式之命令模式

Posted by AlexWan on 2017-05-08

在软件设计中,经常需要向某些对象发送请,但是并不知道请求的接收者是谁,也不知道具体请求的操作者,只需要在程序运行时指定具体的请求接收者即可。此时可以使用命令模式来进行设计,使得请求发送者与请求接收者消除彼此之间的耦合,让对象之间的调用关系更加灵活。

1.1 命令模式定义

命令模式 :将一个请求封装成对象,从而使我们可用不同的请求对客户端进行参数化;支持请求队列,日志记录和撤销操作。

1.2 结构

  • Command:抽象命令类
    声明抽象方法execute,面向命令的接口编程。
  • ConcreateCommand:具体命令类
    命令具体实现类,负责命令具体操作。
  • Invoker:调用者
    接收到命令,分析和分发命令。
  • Receiver:接收者
    接收到命令,执行命令操作。命令最终的执行者。
  • Client:客户端
    命令发送者,找到Invoker分发命令。

命令模式包含四个角色:++抽象命令类++定义用于执行请求的execute等方法,通过这些方法可以调用请求者的相关操作;++具体命令类++是抽象命令类的子类,实现了在抽象命令类中定义的方法,对应具体的接收者对象,将接收者对象的动作绑定其中;调用者即++请求者++,通过命令对象来执行请求;++接收者++执行与请求相关的操作,具体实现对请求的业务处理。
img
命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分隔开。每个命令都是一个操作:请求者发出请求执行命令;接收者收到请求执行命令的操作。

  • 优点
    • 降低系统的耦合度
    • 新的命令很容易加入到系统中
    • 可以比较容易地设计一个命令队列和宏命令
    • 可以方面地实现对请求的Undo和Redo
  • 缺点
    • 可能会导致系统有过多的具体命令。

参考

命令模式