命令模式属于对象的行为模式。命令模式又称为行动模式或交易模式。命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
命令模式是对命令的封装。命令模式把发出命令的责任和执行命令的责任分割开,委派给不同的对象。每一个命令都是一个操作:请求的一方发出请求要求执行一个操作;接收的一方收到请求,并执行操作。命令模式允许请求的一方和接收的一方独立开来,使得请求的一方不必知道接收请求的一方的接口,更不必知道请求时怎么被接收,以及操作是否被执行、何时被执行,以及是怎么被执行的。
命令允许请求的一方和接收请求的一方能够独立演化,从而具有以下的优点:
1)命令模式使新的命令很容易地被加入到系统里。
2)允许接收请求的一方决定是否要否决请求。
3)能较容易地设计一个命令队列。
4)可以容易地实现对请求的Undo和Redo。
5)在需要的情况下,可以较容易地将命令记入日志。
示例:
1、结构
Command接口:
package command.command;
public interface Command {
public void execute();
}
ConcreteCommand类:
package command.command;
import command.Receiver;
public class ConcreteCommand implements Command{
private Receiver receiver;
public ConcreteCommand(Receiver receiver){
this.receiver = receiver;
}
public void execute() {
this.receiver.action();
}
}
Receiver类:
package command;
public class Receiver {
public Receiver(){
System.out.println("Receiver is created。。。。。。");
}
public void action(){
System.out.println("Action has been taken。。。。。。");
}
}
Invoker类:
package command;
import command.command.Command;
public class Invoker {
private Command command;
public Invoker(Command command){
this.command = command;
}
public void action(){
this.command.execute();
}
}
Client类:
package command;
import command.command.Command;
import command.command.ConcreteCommand;
public class Client {
public static void main(String args[]){
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker(command);
invoker.action();
}
}