命令模式
定义:将请求封装成对象,以便使用不同的请求,队列或者日志来参数化其他对象。命令模式也支持可撤销的操作
类图
示例
//Receiver public class Light { public void lightOn(){ System.out.println("开灯!"); } public void lightOff(){ System.out.println("关灯!"); } } //Command接口 public interface Command { void execute();//执行命令 void undo();//撤销命令 } //ConcreteCommand public class LightOnCommand implements Command{ Light light; public LightOnCommand(Light light){ this.light =light; } @Override public void execute() { light.lightOn(); } @Override public void undo() { light.lightOff(); } } //Invoker public class Invoker { Command command; public void setCommand(Command command){ this.command = command; } public void operation(){//开始执行命令 command.execute(); } public void undoOperation(){//撤销执行命令 command.undo(); } } //Client public class CommandTestDemo { public static void main(String[] args) { Light light = new Light(); Command lightOnCommand = new LightOnCommand(light); //把Receiver设置到ConcreteCommand Invoker invoker = new Invoker(); invoker.setCommand(lightOnCommand);//调用者持有Invoker决定什么时候调用ConcreteCommand invoker.operation();//开始执行操作 invoker.undoOperation();//撤销操作 } }
执行结果
使用场景
- 需要对用户请求和实际行为解耦的情况,如:需要记录,撤销,事务等处理时。
- 把一组动作封装进一个命令,实现宏命令。
- 队列请求。
- 日志请求。
语言是思想的载体