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,做到有迹可循