文章目录
定义
命令模式(Command Pattern)是一种行为设计模式,它将请求封装为一个对象,从而让你可以用不同的请求对客户进行参数化,队列化请求或者记录请求日志,以及支持可撤销的操作。
命令模式的要素:
- 命令接口(Command Interface):定义执行操作的接口。
- 具体命令(Concrete Command):实现命令接口,负责具体的业务逻辑处理。
- 接收者(Receiver):真正执行操作的类,包含业务逻辑方法。
- 调用者(Invoker):持有命令对象,并调用其execute方法来执行命令。
示例代码
-
定义命令接口
javapublic interface Command { void execute(); }
-
实现具体命令
javapublic class LightOnCommand implements Command { private final Light light; public LightOnCommand(Light light) { this.light = light; } @Override public void execute() { light.turnOn(); } }
javapublic class LightOffCommand implements Command { private final Light light; public LightOffCommand(Light light) { this.light = light; } @Override public void execute() { this.light.turnOff(); } }
-
定义接收者
javapublic class Light { public void turnOn() { System.out.println("Light is on"); } public void turnOff() { System.out.println("Light is off"); } }
-
调用者
javapublic class RemoteControl { private Command command; public void setCommand(Command command) { this.command = command; } public void pressButton() { command.execute(); } }
-
使用示例
javapublic class CommandTest extends TestCase { @Test public void test() { // 创建电灯对象 Light light = new Light(); // 创建命令对象 Command lightOn = new LightOnCommand(light); Command lightOff = new LightOffCommand(light); // 创建遥控器对象 RemoteControl remoteControl = new RemoteControl(); // 设置命令 remoteControl.setCommand(lightOn); // 按下按钮,执行命令 remoteControl.pressButton();// 输出: Light is on // 更换命令 remoteControl.setCommand(lightOff); // 再次按下按钮,执行新的命令 remoteControl.pressButton(); // 输出: Light is off } }
运行结果:
Light is on Light is off