用java编写一个使用命令模式的案例
时间: 2024-02-24 19:55:50 浏览: 24
好的,下面是一个使用命令模式的Java案例:
命令模式是一种行为设计模式,它将请求封装成独立的对象,从而使不同的请求能够灵活地进行参数化,并且能够支持命令的排队、记录日志、撤销操作等功能。
在这个案例中,我们将创建一个简单的遥控器应用程序,用户可以通过遥控器控制电器的开关,如电视、音响等。
首先,我们需要定义一个命令接口,所有的具体命令都需要实现这个接口:
```java
public interface Command {
public void execute();
}
```
接下来,我们定义一些具体的命令类,如打开电视、关闭电视、打开音响、关闭音响等:
```java
public class TVOnCommand implements Command {
private TV tv;
public TVOnCommand(TV tv) {
this.tv = tv;
}
public void execute() {
tv.on();
}
}
public class TVOffCommand implements Command {
private TV tv;
public TVOffCommand(TV tv) {
this.tv = tv;
}
public void execute() {
tv.off();
}
}
public class StereoOnCommand implements Command {
private Stereo stereo;
public StereoOnCommand(Stereo stereo) {
this.stereo = stereo;
}
public void execute() {
stereo.on();
}
}
public class StereoOffCommand implements Command {
private Stereo stereo;
public StereoOffCommand(Stereo stereo) {
this.stereo = stereo;
}
public void execute() {
stereo.off();
}
}
```
其中,TV 和 Stereo 是具体的电器类,这里我们就不再赘述,可以自行实现。
接下来,我们定义一个遥控器类,它包含了一些命令对象,可以将这些命令对象和遥控器上的按钮进行绑定:
```java
public class RemoteControl {
private Command[] onCommands;
private Command[] offCommands;
public RemoteControl() {
onCommands = new Command[2];
offCommands = new Command[2];
for (int i = 0; i < 2; i++) {
onCommands[i] = new NoCommand();
offCommands[i] = new NoCommand();
}
}
public void setCommand(int slot, Command onCommand, Command offCommand) {
onCommands[slot] = onCommand;
offCommands[slot] = offCommand;
}
public void onButtonWasPushed(int slot) {
onCommands[slot].execute();
}
public void offButtonWasPushed(int slot) {
offCommands[slot].execute();
}
}
```
在这个遥控器类中,我们定义了一个 onCommands 数组和一个 offCommands 数组,用于保存具体的开关命令对象。在 setCommand 方法中,我们可以将具体的命令对象和遥控器上的按钮进行绑定。在 onButtonWasPushed 和 offButtonWasPushed 方法中,我们可以通过调用具体的命令对象的 execute 方法来进行电器的开关操作。
最后,我们定义一个测试类来测试我们的遥控器程序:
```java
public class RemoteControlTest {
public static void main(String[] args) {
RemoteControl remoteControl = new RemoteControl();
TV tv = new TV();
Stereo stereo = new Stereo();
TVOnCommand tvOnCommand = new TVOnCommand(tv);
TVOffCommand tvOffCommand = new TVOffCommand(tv);
StereoOnCommand stereoOnCommand = new StereoOnCommand(stereo);
StereoOffCommand stereoOffCommand = new StereoOffCommand(stereo);
remoteControl.setCommand(0, tvOnCommand, tvOffCommand);
remoteControl.setCommand(1, stereoOnCommand, stereoOffCommand);
remoteControl.onButtonWasPushed(0);
remoteControl.offButtonWasPushed(0);
remoteControl.onButtonWasPushed(1);
remoteControl.offButtonWasPushed(1);
}
}
```
这里我们创建了一个遥控器对象,以及两个电器对象(TV 和 Stereo)。然后创建了四个具体的命令对象,并将它们分别和遥控器上的两个按钮进行了绑定。最后,我们通过调用遥控器对象的 onButtonWasPushed 和 offButtonWasPushed 方法来进行电器的开关操作。
这就是一个使用命令模式的Java案例。