一:命令模式
命令模式,看可以从名字看出来,就是命令。那么命令模式至少包含3个主体内容,命令发出者、命令内容,命令执行者。在官方的定义中:将一个请求封装陈一个对象,使用不同的请求对客户端进行参数化。
命令模式的应用场景:
(1)抽象化动作指令
(2)支持操作取消
命令模式的涉及的角色:
(1)命令内容:包含命令接口抽象化和命令的具体实现
(2)命令的发出者:命令的发出者
(3)命令的执行者:命令执行者
二:代码解析
(1)命令
package test;
/*
* 命令抽象
*/
public interface Command {
//执行
public void excute();
//取消
public void unDo();
}
package test;
/*
* 命令的实现
*/
public class ConcreteCommand implements Command{
//绑定一个执行者
Receiver rv;
public ConcreteCommand(Receiver rv) {
this.rv = rv;
}
public void excute() {
rv.action();
}
public void unDo() {
rv.unAction();
}
}
(2)任务的执行者
package test;
/*
* 任务的执行者
*/
public class Receiver {
public void action() {
System.out.println("执行一个命令");
}
public void unAction() {
System.out.println("撤销一个命令");
}
}
(3)命令的发出者
package test;
/*
* 命令发出者
*/
public class Invoker {
// 调用者持有一个命令对象
Command command;
public Command getCommand() {
return command;
}
public void setCommand(Command command) {
this.command = command;
}
// 执行命令
public void excuteCommmand() {
command.excute();
}
// 撤销命令
public void undoCommand() {
command.unDo();
}
}
(4)测试
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
// 创建命令的接受者
Receiver receiver = new Receiver();
// 创建命令对象,并设定它的接受者
Command command = new ConcreteCommand(receiver);
// 创建命令执行者,并将相应的命令作为参数传递给Invoker
Invoker invoker = new Invoker();
invoker.setCommand(command);
// Client端测试一下
invoker.excuteCommmand();
invoker.undoCommand();
}
}