概念:命令模式(Command Pattern)又称行动(Action)模式或交易(Transaction)模式。将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。

- 抽象命令:定义要执行的操作。
- 具体命令:持有命令的真正执行者,并调用其具体操作。
- 命令接收者:真正的命令执行者,定义所有的具体操作。
- 命令调用者:接收命令,并调用命令的具体行为。
接下来用一个开关灯的例子,帮助大家理解这个结构。
java
public interface Command {
void execute();
}
public class LightOnCommand implements Command {
private final Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.lightOn();
}
}
public class LightOffCommand implements Command {
private final Light light;
public LightOffCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.lightOff();
}
}
public class Light {
public void lightOn() {
System.out.println("开灯");
}
public void lightOff() {
System.out.println("关灯");
}
}
public class Invoker {
private final Command command;
public Invoker(Command command) {
this.command = command;
}
public void invoke() {
if (command != null) {
command.execute();
}
}
}
public class Demo {
public static void main(String[] args) {
Light light = new Light();
Invoker invokerOn = new Invoker(new LightOnCommand(light));
Invoker invokerOff = new Invoker(new LightOffCommand(light));
invokerOn.invoke();
invokerOff.invoke();
}
}
如果大家需要视频版本的讲解,欢迎大家关注我的B站:
十五、设计模式之命令模式讲解