命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或事务(Transaction)模式
命令模式允许系统使用不同的请求把客户端参数化,对请求派对或者记录请求日志,可以提供命令的撤销和恢复功能。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。
命令模式允许请求的一方和接收请求的一方能够独立演化,从而具有以下的优点:
- 命令模式使新的命令很容易地被加入到系统里
- 允许接收请求的一方决定是否要否决请求
- 能较容易的设计一个命令队列
- 可以容易的实现对请求的redo
- 在需要的情况下,可以较容易的将命令记入日志。
结构如下:
Client类代码实现如下:
package com.javapatterns.command;
public class Client
{
public static void main(String[] args)
{
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker( );
invoker.action(command );
}
/** @link dependency */
/*#Receiver lnkReceiver;*/
/** @link dependency */
/*#Invoker lnkInvoker;*/
}
应用范围:
- 作为回调函数在面向对象系统中的替代
- 需要不同的时间指定请求,将请求排队。
- 需要支持命令的撤销。命令对象可以存储状态,以便客户端可以撤销上次操作。
- 如果系统需要把所有数据更新到日志里,以便系统崩溃时,可以重新调用execute()命令一条一条执行这些命令,从而恢复系统崩溃前所作的数据更新。