命令模式指将一个请求封装成一个对象,用不同的请求对客户进行参数化。
通过调用者调用接受者,接收者执行命令(调用者→接受者→命令)
以空调遥控器为例子
新建一个空调对象
public class AirConditioner {
String host = "http://www.xxx.com/";
}
新建Command 抽象类
public abstract class Command {
public abstract void run();
public abstract void undo();
}
新建开命令对象
public class ONCommand extends Command {
private AirConditioner airConditioner;
private String command = "ON";
public ONCommand(AirConditioner airConditioner) {
this.airConditioner = airConditioner;
}
@Override
public void run() {
airConditioner.host = airConditioner.host+command;
System.out.println(airConditioner.host);
}
@Override
public void undo() {
airConditioner.host = airConditioner.host.substring(0, airConditioner.host.length()-command.length());
System.out.println(airConditioner.host);
}
}
新建关命令
public class OFFCommand extends Command {
private AirConditioner airConditioner;
private String command = "OFF";
public OFFCommand(AirConditioner airConditioner) {
this.airConditioner = airConditioner;
}
@Override
public void run() {
airConditioner.host = airConditioner.host+command;
System.out.println(airConditioner.host);
}
@Override
public void undo() {
airConditioner.host = airConditioner.host.substring(0, airConditioner.host.length()-command.length());
System.out.println(airConditioner.host);
}
}
调用相应的接收者执行命令
public class Test {
public static void main(String[] args) {
AirConditioner airConditioner = new AirConditioner();
Command onCommand = new ONCommand(airConditioner);
onCommand.run();
onCommand.undo();
Command offCommand = new OFFCommand(airConditioner);
offCommand.run();
offCommand.undo();
}
}
结果