命令模式(Command Pattern)

标签: 设计模式


简介
  数据驱动的设计模式,行为型模式
  定义:将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
  使命令的发送者和执行者解耦。
  把每个命令(方法)封装成一个对象,以便对多个功能进行封装和处理。

UML类图

角色

客户(Client):创建了一个具体命令(ConcreteCommand)对象并确定其接收者。
命令(Command)接口:声明了一个给所有具体命令类的抽象接口。这是一个抽象角色。
具体命令(ConcreteCommand):定义一个接受者和行为之间的弱耦合;实现Execute()方法,负责调用接收考的相应操作。Execute()方法通常叫做执行方法。
请求者(Invoker):负责调用命令对象执行请求,相关的方法叫做行动方法。
接收者(Receiver):负责具体实施和执行一个请求。任何一个类都可以成为接收者,实施和执行请求的方法叫做行动方法。

Invoker是client直接交互的角色,client发出的命令都保存在Invoker的一个Command list里面,最终由Invoker统一执行这个list里面的命令。一般Command接口只包含一个execute()方法,一个具体Command对应着Receiver里面的一个方法。
适用场景

  1. 命令的发送者和命令执行者有不同的生命周期。命令发送了并不是立即执行。

  2. 命令需要进行各种管理逻辑。

  3. 需要支持撤消\重做操作。

  4. 与Struts2中action的调用过程,用户一个请求对应action类里的execute()方法。

  5. 数据库中的事务机制的底层实现。

posted @ 2017-04-16 10:01  斑鱼  阅读(130)  评论(0编辑  收藏  举报