概念:命令模式(Command Pattern)又称行动(Action)模式或交易(Transaction)模式。将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
- 抽象命令:定义要执行的操作。
- 具体命令:持有命令的真正执行者,并调用其具体操作。
- 命令接收者:真正的命令执行者,定义所有的具体操作。
- 命令调用者:接收命令,并调用命令的具体行为。
接下来用一个开关灯的例子,帮助大家理解这个结构。
public interface Command {void execute();
}public class LightOnCommand implements Command {private final Light light;public LightOnCommand(Light light) {this.light = light;}@Overridepublic void execute() {light.lightOn();}
}public class LightOffCommand implements Command {private final Light light;public LightOffCommand(Light light) {this.light = light;}@Overridepublic void execute() {light.lightOff();}
}public class Light {public void lightOn() {System.out.println("开灯");}public void lightOff() {System.out.println("关灯");}
}public class Invoker {private final Command command;public Invoker(Command command) {this.command = command;}public void invoke() {if (command != null) {command.execute();}}
}public class Demo {public static void main(String[] args) {Light light = new Light();Invoker invokerOn = new Invoker(new LightOnCommand(light));Invoker invokerOff = new Invoker(new LightOffCommand(light));invokerOn.invoke();invokerOff.invoke();}
}
如果大家需要视频版本的讲解,欢迎大家关注我的B站:
十五、设计模式之命令模式讲解