将**请求(一个动作)**封装成对象(命令对象),使得可以用不同的请求对客户进行参数化。
在命令模式中,"请求"指的是一个特定的操作或动作,即客户端希望调用的功能。这个请求被封装在一个对象中,即命令对象。命令对象包含了执行该请求所需的所有信息,包括调用哪个对象、执行什么方法以及可能需要的参数等。
execute
方法,该方法在调用时会触发与命令相关的操作。命令的实现类将具体的操作绑定到 execute
方法中。execute
方法,该方法调用接收者的具体操作来完成命令请求。execute
方法。调用者并不需要了解命令的具体细节,只需知道如何调用命令。/**
* 接收者
*/
public class Light {
void turnOn() {
System.out.println("Light is ON");
}
void turnOff() {
System.out.println("Light is OFF");
}
}
public interface Command {
void execute();
void undo();
}
/**
* 具体命令 开灯
*/
public class LightOnCommand implements Command {
private Light light;
LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.turnOn();
}
@Override
public void undo() {
light.turnOff();
}
}
/**
* 具体命令:关灯
*/
public class LightOffCommand implements Command {
private Light light;
LightOffCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.turnOff();
}
@Override
public void undo() {
light.turnOn();
}
}
/**
* 调用者 遥控器
*/
public class RemoteControl {
private Command command;
private List<Command> commandHistory = new ArrayList<>();
void setCommand(Command command) {
this.command = command;
commandHistory.add(command);
}
void pressButton() {
command.execute();
commandHistory.add(command);
}
}
命令模式在调用者和具体的执行者(接受者)之间加了一层(命令层)