命令模式将请求封装为对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作
举个例子
场景:设计一个开关灯的命令
命令接口
package com.zw.mymaven;
public interface Command {
void excute();
}
命令接受者 灯
package com.zw.mymaven;
public class Light {
public void turnon() {
System.out.println("The light is on");
}
public void turnoff() {
System.out.println("The light is off");
}
}
命令实现类
package com.zw.mymaven;
public class Commandon implements Command {
private Light mylight;
public Commandon(Light light) {
mylight = light;
}
public void excute() {
mylight.turnon();
}
}
package com.zw.mymaven;
public class CommandOff implements Command {
private Light mylight;
public CommandOff(Light light) {
mylight = light;
}
public void excute() {
mylight.turnoff();
}
}
遥控器
package com.zw.mymaven;
public class Control {
private Command commandon;
private Command commandoff;
public Control(Command on, Command off) {
commandon = on;
commandoff = off;
}
public void turnon() {
commandon.excute();
}
public void turnoff() {
commandoff.excute();
}
}
测试类
package com.zw.mymaven;
public class TestCommand {
public static void main(String[] args) {
Light light = new Light();
Commandon on = new Commandon(light);
CommandOff off = new CommandOff(light);
Control control = new Control(on, off);
control.turnon();
control.turnoff();
}
}