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