命令模式的研究以及案例举例,本次研究我的案例是遥控器控制电灯,风扇,电视等功能的实现
时间: 2024-03-06 11:46:09 浏览: 19
好的,下面我来为您介绍命令模式的研究以及案例,并且使用您提供的遥控器控制电灯、风扇、电视等功能的实现作为示例。
命令模式的研究:
命令模式是一种常用的设计模式,它可以将请求者和执行者分离开来,让请求者不必知道执行者的具体实现,从而达到松耦合的效果。在实际应用中,命令模式经常用来实现撤销、重做、批处理等功能,同时还可用来实现日志记录、事务处理等功能。
命令模式的案例:
在本案例中,我们使用命令模式来实现遥控器控制电灯、风扇、电视等功能。具体实现过程如下:
1. 定义命令接口(Command),其中包含执行命令的方法execute()和撤销命令的方法undo()。
```
public interface Command {
void execute();
void undo();
}
```
2. 定义具体命令类(LightOnCommand、LightOffCommand、FanOnCommand、FanOffCommand、TVOnCommand、TVOffCommand),它们实现了命令接口,并且包含了接收者的实例。
```
public class LightOnCommand implements Command {
private Light light;
public LightOnCommand(Light light) {
this.light = light;
}
public void execute() {
light.on();
}
public void undo() {
light.off();
}
}
public class LightOffCommand implements Command {
private Light light;
public LightOffCommand(Light light) {
this.light = light;
}
public void execute() {
light.off();
}
public void undo() {
light.on();
}
}
public class FanOnCommand implements Command {
private Fan fan;
public FanOnCommand(Fan fan) {
this.fan = fan;
}
public void execute() {
fan.on();
}
public void undo() {
fan.off();
}
}
public class FanOffCommand implements Command {
private Fan fan;
public FanOffCommand(Fan fan) {
this.fan = fan;
}
public void execute() {
fan.off();
}
public void undo() {
fan.on();
}
}
public class TVOnCommand implements Command {
private TV tv;
public TVOnCommand(TV tv) {
this.tv = tv;
}
public void execute() {
tv.on();
}
public void undo() {
tv.off();
}
}
public class TVOffCommand implements Command {
private TV tv;
public TVOffCommand(TV tv) {
this.tv = tv;
}
public void execute() {
tv.off();
}
public void undo() {
tv.on();
}
}
```
3. 定义遥控器类(RemoteControl),它包含了多个命令按钮,并且可以设置每个按钮对应的命令。
```
public class RemoteControl {
private Command[] onCommands;
private Command[] offCommands;
private Command undoCommand;
public RemoteControl() {
onCommands = new Command[3];
offCommands = new Command[3];
Command noCommand = new NoCommand();
for (int i = 0; i < 3; i++) {
onCommands[i] = noCommand;
offCommands[i] = noCommand;
}
undoCommand = noCommand;
}
public void setCommand(int slot, Command onCommand, Command offCommand) {
onCommands[slot] = onCommand;
offCommands[slot] = offCommand;
}
public void onButtonWasPushed(int slot) {
onCommands[slot].execute();
undoCommand = onCommands[slot];
}
public void offButtonWasPushed(int slot) {
offCommands[slot].execute();
undoCommand = offCommands[slot];
}
public void undoButtonWasPushed() {
undoCommand.undo();
}
}
```
4. 定义接收者类(Light、Fan、TV),它们实现了具体的功能。
```
public class Light {
public void on() {
System.out.println("Light is on");
}
public void off() {
System.out.println("Light is off");
}
}
public class Fan {
public void on() {
System.out.println("Fan is on");
}
public void off() {
System.out.println("Fan is off");
}
}
public class TV {
public void on() {
System.out.println("TV is on");
}
public void off() {
System.out.println("TV is off");
}
}
```
5. 最后,我们可以使用遥控器来控制电灯、风扇、电视等功能。
```
public class Client {
public static void main(String[] args) {
RemoteControl remote = new RemoteControl();
Light light = new Light();
Fan fan = new Fan();
TV tv = new TV();
Command lightOn = new LightOnCommand(light);
Command lightOff = new LightOffCommand(light);
Command fanOn = new FanOnCommand(fan);
Command fanOff = new FanOffCommand(fan);
Command tvOn = new TVOnCommand(tv);
Command tvOff = new TVOffCommand(tv);
remote.setCommand(0, lightOn, lightOff);
remote.setCommand(1, fanOn, fanOff);
remote.setCommand(2, tvOn, tvOff);
remote.onButtonWasPushed(0); // 打开电灯
remote.offButtonWasPushed(0); // 关闭电灯
remote.undoButtonWasPushed(); // 撤销上一步操作
remote.onButtonWasPushed(1); // 打开风扇
remote.offButtonWasPushed(1); // 关闭风扇
remote.onButtonWasPushed(2); // 打开电视
remote.offButtonWasPushed(2); // 关闭电视
}
}
```
通过上述示例,我们可以看到命令模式的具体实现过程,并且通过遥控器控制电灯、风扇、电视等功能,实现了命令的发出者和执行者分离的效果。