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();
}
}
博客围绕给遥控器添加功能的需求展开。提出引入命令模式的实现思路,让命令对应接口,具体命令在接口实现,每个命令对应具体物体,遥控器作为类,其成员变量无关具体物体,按钮触发时执行具体类命令,并提及了具体实现。
355

被折叠的 条评论
为什么被折叠?



