1. 需求
现在,你接到了这样一个需求:给一个遥控器添加功能,每一个按键都对应一个功能。这样的需求该如何实现呢?
2. 实现思路
引入命令模式,命令Command
对应一个接口,我们所有的具体的命令都实现在Command
接口,每一个具体的命令都有对应具体的物体,如灯,风扇等。遥控器Remote
对应一个类,Remote
的成员变量为Command
,我们的遥控器并不关心Command
中具体到底是什么物体,但是每当按钮被触发,它就会执行具体类的execute()
命令。
3. 具体实现
/**
Command接口,所有具体的命令都得实现这个接口,这样子Remote就不需要关心按钮被触发后到底哪一个物体被操作了,Remote只需要执行对应的execute()即可。
*/
public interface Command {
void execute();
}
/**
具体的命令
*/
public class LightOffCommand implements Command {
Light light;
public LightOffCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.turnOff();
}
}
/**
具体的命令
*/
public class LightOnCommand implements Command {
Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.turnOn();
}
}
/**
具体的物品
*/
public class Light {
private String name;
public Light(String name) {
this.name = name;
}
public void turnOn() {
System.out.println("turn on the " + name);
}
public void turnOff() {
System.out.println("turn off the " + name);
}
}
/**
遥控器类,如果遥控器需要有多个按钮,可以使用一个Command数组来作为成员变量。
*/
public class SimpleRemoteControl {
Command slot;
public void setCommand(Command c) {
this.slot = c;
}
public void pressButton() {
slot.execute();
}
}