15、命令模式
命令模式就是将“动作的请求者”从“动作的执行者”对象中解耦。
具体示例:遥控器可以操控多个电器,每个电器有开和关两个按钮(分别对应开和关命令)。
UML类图:
Java代码:
// 命令接口
public interface Command {
void execute();
}
// 开灯命令
public class LightOnCommand implements Command {
Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.on();
}
}
// 关灯命令
public class LightOffCommand implements Command {
Light light;
public LightOffCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.off();
}
}
// 灯
public class Light {
public void on(){
System.out.println("开灯了");
}
public void off(){
System.out.println("关灯了");
}
}
// 遥控器
public class RemoteController {
//打开命令
Command[] onCommands;
//关闭命令
Command[] offCommands;
public RemoteController() {
this.onCommands = new Command[5];
this.offCommands = new Command[5];
}
// 为第no个按钮设置命令
public void setCommands(int no,Command onCommand,Command offCommand){
onCommands[no] = onCommand;
offCommands[no] = offCommand;
}
// 按第no个的打开按钮
public void pushOnButton(int no){
onCommands[no].execute();
}
// 按第no个的关闭按钮
public void pushOffButton(int no){
offCommands[no].execute();
}
}
public class Test320 {
public static void main(String[] args) {
Light light = new Light();
LightOffCommand lightOffCommand = new LightOffCommand(light);
LightOnCommand lightOnCommand = new LightOnCommand(light);
RemoteController remoteController = new RemoteController();
remoteController.setCommands(0,lightOnCommand,lightOffCommand);
remoteController.pushOnButton(0);
remoteController.pushOffButton(0);
}
}