请帮我写一个设计模式 中的命令模式的一个案例背景并提供代码
时间: 2023-08-28 11:15:09 浏览: 41
好的,假设有一个遥控器,它可以控制家里的一些电器,比如电视机、音响等。我们可以使用命令模式来实现这个遥控器。
首先,我们需要定义一个命令接口,它包含了执行操作的方法execute():
```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类是电视和音响的具体实现。
接下来,我们需要定义一个遥控器Invoker,它包含了一些按钮,每个按钮对应一个具体的命令:
```java
public class RemoteControl {
private Command[] onCommands;
private Command[] offCommands;
public RemoteControl() {
onCommands = new Command[2];
offCommands = new Command[2];
NoCommand noCommand = new NoCommand();
for (int i = 0; i < 2; i++) {
onCommands[i] = noCommand;
offCommands[i] = 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();
}
}
```
最后,我们可以在客户端使用遥控器控制电器:
```java
public class Client {
public static void main(String[] args) {
RemoteControl remoteControl = new RemoteControl();
TV tv = new TV();
Stereo stereo = new Stereo();
Command tvOnCommand = new TVOnCommand(tv);
Command tvOffCommand = new TVOffCommand(tv);
Command stereoOnCommand = new StereoOnCommand(stereo);
Command 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);
}
}
```
这个案例通过遥控器控制电器,演示了命令模式的使用。