命令模式(Command Pattern)
标签: 设计模式
简介
数据驱动的设计模式,行为型模式。
定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
使命令的发送者和执行者解耦。
把每个命令(方法)封装成一个对象,以便对多个功能进行封装和处理。
UML类图
角色
客户(Client):创建了一个具体命令(ConcreteCommand)对象并确定其接收者。
命令(Command)接口:声明了一个给所有具体命令类的抽象接口。这是一个抽象角色。
具体命令(ConcreteCommand):定义一个接受者和行为之间的弱耦合;实现Execute()方法,负责调用接收考的相应操作。Execute()方法通常叫做执行方法。
请求者(Invoker):负责调用命令对象执行请求,相关的方法叫做行动方法。
接收者(Receiver):负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。
Invoker是client直接交互的角色,client发出的命令都保存在Invoker的一个Command list里面,最终由Invoker统一执行这个list里面的命令。一般Command接口只包含一个execute()方法,一个具体Command对应着Receiver里面的一个方法。
适用场景
-
命令的发送者和命令执行者有不同的生命周期。命令发送了并不是立即执行。
-
命令需要进行各种管理逻辑。
-
需要支持撤消\重做操作。
-
与Struts2中action的调用过程,用户一个请求对应action类里的execute()方法。
-
数据库中的事务机制的底层实现。