编程中的Command模式是一种行为设计模式,它封装了一个请求作为一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。下面是一个简单的Java示例,展示了如何使用Command模式:
定义命令接口
```java
public interface Command {
void execute();
void undo();
}
```
创建具体命令类
```java
public class LightOnCommand implements Command {
private Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.on();
}
@Override
public void undo() {
light.off();
}
}
public class LightOffCommand implements Command {
private Light light;
public LightOffCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.off();
}
@Override
public void undo() {
light.on();
}
}
```
创建接收者类
```java
public class RemoteControl {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void pressButton() {
command.execute();
}
}
```
客户端代码
```java
public class Client {
public static void main(String[] args) {
Light light = new Light();
Command lightOn = new LightOnCommand(light);
Command lightOff = new LightOffCommand(light);
RemoteControl remote = new RemoteControl();
remote.setCommand(lightOn);
remote.pressButton(); // 执行开灯操作
remote.setCommand(lightOff);
remote.pressButton(); // 执行关灯操作
}
}
```
在这个例子中,`LightOnCommand` 和 `LightOffCommand` 是具体命令类,它们实现了 `Command` 接口。`RemoteControl` 类是接收者,它持有一个 `Command` 对象,并在 `pressButton` 方法中调用该命令的 `execute` 方法。客户端代码通过设置不同的命令对象来控制灯光的开和关。
这种设计模式使得请求的发送者和接收者解耦,使得请求的封装、排队、记录日志、撤销和恢复等操作更加灵活和可扩展。