命令模式
将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
适用性
1.抽象出待执行的动作以参数化某对象
2.在不同的时刻指定,排列和执行请求
3.支持取消操作
4.支持修改日志,这样当系统崩溃时,这修改可以被重做一遍
5.用构建在原语操作上的高层操作构造一个系统
参与者
1.Command
声明执行操作的接口
2.ConcreteCommand
将一个接收者对象绑定于一个动作。调用接收者相应的操作,以实现Execute
3.Client
创建一个具体命令对象并设定它的接受者
4.Invoker
要求该命令执行这个请求
5.Receiver
知道如何实现与执行一个请求相关的操作。任何类都可能作为一个接受者
一个例子:
1.Command
public abstract class Command{
protected Receiver receiver;
public Command(Receiver receiver){
this.receiver = receiver;
}
public abstract void execute();
}
2.ConcreteCommand
public class CommandImpl extends Command{
public CommandImpl(Receiver receiver){
super(receiver);
}
public void execute(){
receiver.receive();
}
}
3.Invoker
public class Invoker{
private Command command;
public void setCommand(Command command){
this.command = command;
}
public void execute(){
command.execute();
}
}
4.Receiver
public class Receiver{
public void receive(){
System.out.println("this is receive class");
}
}
5.Client
public class Test{
public static void main(String[] args){
Receiver rec = new Receiver();
Command cmd = new CommandImpl(rec);
Invoker i = new Invoker();
i.setCommand(cmd);
i.execute();
}
}
result:
this is receive class
参考资料
1.http://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html