命令模式
介绍
命令模式是一种行为类设计模式,核心是将每种请求或操作封装为一个独立的对象,从而可以集中管理这些请求或操作,比如将请求队列化依次执行、或者对操作进行记录和撤销。 命令模式通过将请求的发送者(客户端)和接收者(执行请求的对象)解耦,提供了更大的灵活性和可维护性。
下面来举个例子
我们在生活中都用过电视机,我们就相当于客户端,要操作电视来换台;而 电视 就是执行请求的对象,要根据我们的操作来换台。但是我们一般不会直接按电视上的按钮来换台,而是用一个 遥控器,通过点击遥控器上的 操作按钮 来控制电视。 这样就相当于把我们和电视解耦了。哪怕遥控器丢了,再换一个遥控器就好了;而且现在手机都能作为万能的电视遥控器,我们可以同时遥控多个品牌的设备,不用关心设备的具体品牌型号,提供了更大的方便。
优点
命令模式最大的优点就是解耦请求发送者和接受者,让系统更加灵活、可扩展。
代码示例
Command.java
public interface Command {
void execute();
}
Device.java
public class Device {
private String name;
public Device(String name){
this.name = name;
}
public void turnOn(){
System.out.println(name + " 设备打开");
}
public void turnOff(){
System.out.println(name + " 设备关闭");
}
}
RemoteControl.java
public class RemoteControl {
private Command command;
public void setCommand(Command command){
this.command = command;
}
public void pressButton(){
command.execute();
}
}
TurnOffCommand.java
public class TurnOffCommand implements Command {
private Device device;
public TurnOffCommand(Device device){
this.device = device;
}
public void execute(){
device.turnOff();
}
}
TurnOnCommand
public class TurnOnCommand implements Command{
private Device device;
public TurnOnCommand(Device device){
this.device = device;
}
public void execute(){
device.turnOn();
}
}
Client.java
public class Client {
public static void main(String[] args) {
// 创建接收者对象
Device tv = new Device("TV");
Device microphone = new Device("Microphone");
// 创建具体命令对象,可以绑定不同设备
TurnOnCommand turnOn = new TurnOnCommand(tv);
TurnOffCommand turnOff = new TurnOffCommand(microphone);
// 创建调用者
RemoteControl remote = new RemoteControl();
// 执行命令
remote.setCommand(turnOn);
remote.pressButton();
remote.setCommand(turnOff);
remote.pressButton();
}
}
运行结果