具体实现
package com.desinmode.command;
public interface Command {
void execute();
}
package com.desinmode.command;
public class Light {
public void on() {
System.out.println("Light on!");
};
public void off() {
System.out.println("Light off!");
};
}
package com.desinmode.command;
public class LightOffCommand implements Command{
Light light;
public LightOffCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.off();
}
}
package com.desinmode.command;
public class LightOnCommand implements Command{
Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.on();
}
}
package com.desinmode.command;
/**
* 空调
* @author hexiaoli
*
*/
public class Invoker {
public Command[] onCommands;
public Command[] offCommands;
private final int slotNumber = 7;
public Invoker() {
this.onCommands = new Command[slotNumber];
this.offCommands = new Command[slotNumber];
}
public void setOnCommand(Command command ,int slot) {
onCommands[slot] = command;
}
public void setOffCommand(Command command ,int slot) {
offCommands[slot] = command;
}
public void onButtonWasPushed(int slot) {
onCommands[slot].execute();
}
public void offButtonWasPushed(int slot) {
offCommands[slot].execute();
}
}
主函数
package com.desinmode.command;
/**
* 命令:将命令封装成对象,具有以下功能:使用命令参数化其他对象,将命令放入队列中排队,将命令记录到日志中,可以撤销命令。
* Client:设置命令、接收命令。
* Command:命令
* Receiver:命令的接受者
* Invoker:通过他来调用命令。
* @author hexiaoli
*
*/
public class Client {
public static void main(String[] args) {
Invoker invoker = new Invoker();
Light light = new Light();
Command lightOnCommand = new LightOnCommand(light);
Command lightOffCommand = new LightOffCommand(light);
invoker.setOnCommand(lightOnCommand, 0);
invoker.setOffCommand(lightOffCommand, 0);
invoker.onButtonWasPushed(0);
invoker.offButtonWasPushed(0);
}
}