命令模式
文章目录
什么时命令模式
命令模式(Command),将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日志,以及支持可撤销的操作。
通过示例了解命令模式
命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而使你可用不同的请求参数化其他对象。命令模式也支持撤销操作。下面是一个简单的Java命令模式示例,以控制家电设备为例:
接受者接口:家电设备接口
java
public interface Device {
void on();
void off();
}
具体接收者:电视
java
public class Television implements Device {
@Override
public void on() {
System.out.println("Television is turned on.");
}
@Override
public void off() {
System.out.println("Television is turned off.");
}
}
具体接收者:空调
java
public class AirConditioner implements Device {
@Override
public void on() {
System.out.println("Air conditioner is turned on.");
}
@Override
public void off() {
System.out.println("Air conditioner is turned off.");
}
}
命令接口:设备控制接口
java
public interface Command {
void execute();
}
具体命令:打开设备的命令
java
public class TurnOnCommand implements Command {
private Device device;
public TurnOnCommand(Device device) {
this.device = device;
}
@Override
public void execute() {
device.on();
}
}
具体命令:关闭设备的命令
java
public class TurnOffCommand implements Command {
private Device device;
public TurnOffCommand(Device device) {
this.device = device;
}
@Override
public void execute() {
device.off();
}
}
请求者:遥控器
java
public class RemoteControl {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void pressButton() {
command.execute();
}
}
主程序
java
public class CommandPatternDemo {
public static void main(String[] args) {
RemoteControl remote = new RemoteControl();
Device television = new Television();
Command turnOnTelevision = new TurnOnCommand(television);
Command turnOffTelevision = new TurnOffCommand(television);
remote.setCommand(turnOnTelevision);
remote.pressButton(); // 输出:Television is turned on.
remote.setCommand(turnOffTelevision);
remote.pressButton(); // 输出:Television is turned off.
Device airConditioner = new AirConditioner();
Command turnOnAirConditioner = new TurnOnCommand(airConditioner);
Command turnOffAirConditioner = new TurnOffCommand(airConditioner);
remote.setCommand(turnOnAirConditioner);
remote.pressButton(); // 输出:Air conditioner is turned on.
remote.setCommand(turnOffAirConditioner);
remote.pressButton(); // 输出:Air conditioner is turned off.
}
}
- Device接口是接受者,定义了设备的基本操作。
- Television和AirConditioner是具体接收者,实现了Device接口。
- Command接口是命令接口,定义了执行命令的方法
- TurnOnCommand和TurnOffCommand是具体命令,它们持有设备对象并实现了execute方法。
- RemoteControl是请求者,它持有一个命令对象,并调用execute方法来执行命令。
- main方法展示了如何使用遥控器控制不同设备的开关操作。
通过命令模式,我们可以轻松地添加新的设备和控制操作,同时保持遥控器类的简洁。