bacor

个人站

Coding is important, so is writing


命令模式

定义

将一个请求封装成对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能

通用类图如下:

在类图中有三个角色:Receiver执行命令,命令传递链条最终到达这里;Command即声明的命令;Invoker接收并执行命令。

优点

  • 类间解耦
    Invoker和Receiver区分开,Invoker使用时只需调用Command的execute方法无需关注到底谁哪个接收者
  • 可拓展性高
  • 结合其他模式可达到更强性能

缺点

当有N个命令时,Command子类会有N个,迅速膨胀

使用场景

模式如其名,只要是你认为是命令的地方就可使用命令模式

拓展

反悔问题

有时候我们会想到:发出一个命令后,想要撤回回滚,怎么办呢?
这里可以有两种方法实现:

  1. 结合备忘录模式还原状态,此方法适合Receiver只做状态变更而不适合事件处理;
  2. 增加一个新的命令,实现事件回滚

参考:

设计模式之禅