命令模式(Command Pattern)是一种行为设计模式,它允许你将一个请求封装为一个对象,从而使你可以使用不同的请求、队列或日志请求参数化其他对象。此外,它还支持可撤销的操作。在Java中,命令模式通常涉及以下几个角色:
- 命令接口(Command):定义一个执行操作的方法。
- 具体命令(Concrete Command):实现命令接口,并在其方法中调用接收者的方法来完成命令要执行的操作。
- 接收者(Receiver):执行与请求相关的操作。
- 调用者(Invoker):要求该命令执行这个请求。
- 客户端(Client):创建具体命令对象,并将其传递给调用者以执行命令。
下面是一个简单的Java命令模式的例子:
// 命令接口 interface Command { void execute(); } // 接收者 class LightOnCommand implements Command { Light light; public LightOnCommand(Light light) { this.light = light; } @Override public void execute() { light.on(); } } // 调用者 class RemoteControl { Command command; public void setCommand(Command command) { this.command = command; } public void pressButton() { command.execute(); } } // 具体命令 class Light { public void on() { System.out.println("Light is ON"); } public void off() { System.out.println("Light is OFF"); } } // 客户端 public class Client { public static void main(String[] args) { Light light = new Light(); Command lightOnCommand = new LightOnCommand(light); RemoteControl remoteControl = new RemoteControl(); remoteControl.setCommand(lightOnCommand); remoteControl.pressButton(); } }
在这个例子中,我们有一个Light
类,它有两个方法:on()
和off()
。我们创建了一个LightOnCommand
类,它实现了Command
接口,并在其execute()
方法中调用了Light
类的on()
方法。RemoteControl
类作为调用者,它有一个Command
类型的成员变量,可以通过setCommand()
方法设置具体命令,并通过pressButton()
方法执行命令。
在客户端代码中,我们创建了一个Light
对象和一个LightOnCommand
对象,然后将LightOnCommand
对象设置为RemoteControl
对象的命令,最后调用RemoteControl
对象的pressButton()
方法来打开灯。