命令模式
介绍
命令模式是一种行为类设计模式,核心是将每种请求或操作封装为一个独立的对象,从而可以集中管理这些请求或操作,比如将请求队列化依次执行、或者对操作进行记录和撤销。 命令模式通过将请求的发送者(客户端)和接收者(执行请求的对象)解耦,提供了更大的灵活性和可维护性。
下面来举个例子
我们在生活中都用过电视机,我们就相当于客户端,要操作电视来换台;而 电视 就是执行请求的对象,要根据我们的操作来换台。但是我们一般不会直接按电视上的按钮来换台,而是用一个 遥控器,通过点击遥控器上的 操作按钮 来控制电视。 这样就相当于把我们和电视解耦了。哪怕遥控器丢了,再换一个遥控器就好了;而且现在手机都能作为万能的电视遥控器,我们可以同时遥控多个品牌的设备,不用关心设备的具体品牌型号,提供了更大的方便。
优点
命令模式最大的优点就是解耦请求发送者和接受者,让系统更加灵活、可扩展。
代码示例
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();}
}
运行结果