一.命令模式定义
1.Receive接收者角色
该角色就是干活的角色,命令传递到这里时应该被执行的
2.Command命令角色
需要执行的所以命令都在这里声明
3.Invoker调用者角色
接受到命令,并执行命令。
二.示例
1.抽象接收者角色
/**
* 定义接收者
*/
public abstract class Receiver {
/**
* 抽象接收者,定义每个接受者都必须要完成的业务
*/
public abstract void dosomething();
}
2.具体的接收者实现
接收者可以有多个,根据业务依赖定义。
public class ConcreteReceiver1 extends Receiver {
@Override
public void dosomething() {
//TODO 接收者处理一定的业务
}
}
public class ConcreteReceiver2 extends Receiver {
@Override
public void dosomething() {
//TODO 接收者处理一定的业务
}
}
3.抽象Command类
public abstract class Command {
/**
* 每个命令类都必须有一个执行命令的方法
*/
public abstract void execute();
}
4.具体的Command类
public class ConcreteCommand1 extends Command {
//那个receiver类要执行命令
private Receiver receiver;
public ConcreteCommand1(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
//业务处理
this.receiver.dosomething();
}
}
public class ConcreteCommand2 extends Command {
//那个receiver类要执行命令
private Receiver receiver;
public ConcreteCommand1(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
//业务处理
this.receiver.dosomething();
}
}
5.调用者Invoker类
public class Invoker {
private Command command;
/**
* 接收命令
* @param command
*/
public void setCommand(Command command) {
this.command = command;
}
/**
* 执行命令
*/
public void action() {
this.command.execute();
}
}
6.高层模块应用
public class Client {
public static void main(String[] args) {
Invoker invoker = new Invoker();
//定义接收者
Receiver receiver = new ConcreteReceiver1();
//定义一个命令给接收者
Command command = new ConcreteCommand1(receiver);
//把命令交给调用者执行
invoker.setCommand(command);
invoker.action();
}
}
三.应用场景
大致的应用场景