命令模式
介绍
命令模式/动作模式/事务模式:将一个请求封装成请求对象,从而可以让我们用不同的请求对客户进行参数化
角色
- Command(抽象命令类):一般是接口或者抽象类,其中声明了用于执行请求的方法
- ConcreteCommand(具体命令类):抽象命令类的子类,实现了其中声明的方法,对于具体的接收者,将接收者的动作绑定其中
- Invoker(调用者):请求发送者,通过命令对象来执行请求
- Receiver(接收者):执行与请求相关的操作,具体实现对请求的业务处理
示例代码
//抽象命令类
public abstract class Command {
public abstract void execute();
}
//具体命令类A
public class ConcreteCommandA extends Command {
private ReceiverA receiverA;
public ConcreteCommandA() {
receiverA = new ReceiverA();
}
@Override
public void execute() {
receiverA.action();
}
}
//具体命令类B
public class ConcreteCommandB extends Command {
private ReceiverB receiverB;
public ConcreteCommandB() {
receiverB = new ReceiverB();
}
@Override
public void execute() {
receiverB.action();
}
}
//请求接收者A
public class ReceiverA {
public void action() {
System.out.println("ReceiverA");
}
}
//请求接收者B
public class ReceiverB {
public void action() {
System.out.println("ReceiverB");
}
}
//调用者
public class Invoker {
private Command command;
public Invoker(Command command) {
this.command = command;
}
public void setCommand(Command command) {
this.command = command;
}
public void call() {
command.execute();
}
public static void main(String[] args) {
Command commandA = new ConcreteCommandA();
Command commandB = new ConcreteCommandB();
Invoker invoker = new Invoker(commandA);
invoker.call();
invoker.setCommand(commandB);
invoker.call();
}
}