Version: Next

命令模式

问题:invoker和receiver直接耦合,这样执行起来是无痕的,但是有些情况下我们希望对invoker调用的命令做记录,例如实现undo

invoke -> command -> concreteCommand

通过抽象类command将Invoke与concreteCommand解耦,满足开闭原则,invoker看不到具体的concreteComand

concreteCommand -> Receiver 直接耦合,concreteCommand皆继承抽象类command

调用过程:

  • client创建Command实例化对象,invoker使用Command引用调用Execute方法,由concreteCommand实际执行Execute方法,其掌握receiver引用,激活receiver的action行为

如何体现记录

将concreteCommand的引用(而非对象)以数据结构的形式组织,例如链表,可以利用链表实现命令的undo,做到有迹可循