命令模式(Command Pattern)
来源:互联网 发布:linux命令执行漏洞函数 编辑:程序博客网 时间:2024/06/05 10:43
命令模式:将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作
案例:用户和多调节灯案例,并且用栈实现多撤销
代码:图里面没有画出栈,我在User里加了记录命令执行的栈,然后Light里家里灯的几个状态
public interface Command {public void execute();public void undo();}
public class Light {public static final int LOW = 0;public static final int MID = 1;public static final int HIGH = 2;public static final int OFF = -1;private int status;public Light() {status = OFF;}public void setLow() {System.out.println("Light is be changed to low");status = LOW;}public void setMid() {System.out.println("Light is be changed to mid");status = MID;}public void setHigh() {System.out.println("Light is be changed to high");status = HIGH;}public void turnOff() {System.out.println("Light is turned off");status = OFF;}public int getStatus() {return status;}}
public class User {private Command[] commands;private Stack<Command> s;public User() {s = new Stack<Command>();}public void setCommand(Command[] com) {this.commands = com;}public void turnOnLow() {commands[0].execute();s.push(commands[0]);}public void turnOnMid() {commands[1].execute();s.push(commands[1]);}public void turnOnHigh() {commands[2].execute();s.push(commands[2]);}public void turnOff() {commands[3].execute();s.push(commands[3]);}public void undo() {if (!s.isEmpty()) {s.pop().undo();}}}
public class LightHighCommand implements Command {private Light light;private int preStatus;public LightHighCommand(Light light) {this.light = light;}@Overridepublic void execute() {preStatus = light.getStatus();light.setHigh();}@Overridepublic void undo() {if (preStatus == Light.LOW) {light.setLow();} else if (preStatus == Light.MID) {light.setMid();} else if (preStatus == Light.HIGH) {light.setHigh();} else if (preStatus == Light.OFF) {light.turnOff();}}}
其他几个命令类似
public class PatternDemo {public static void main(String[] args) {User user = new User();Light light = new Light();LightLowCommand lowCommand = new LightLowCommand(light);LightMidCommand midCommand = new LightMidCommand(light);LightHighCommand highCommand = new LightHighCommand(light);LightTrunOffCommand turnOffCommand = new LightTrunOffCommand(light);Command[] commands = new Command[] {lowCommand, midCommand, highCommand, turnOffCommand};user.setCommand(commands);user.turnOnLow();user.turnOnMid();user.turnOnHigh();user.turnOff();user.undo();user.undo();user.undo();user.undo();user.undo();}}
- 命令模式(Command Pattern)
- 命令模式(Command Pattern)
- 命令模式(Command Pattern)
- 命令模式(Command Pattern)
- 命令模式(Command Pattern)
- 命令模式(Command Pattern)
- 命令模式(Command Pattern)
- 命令模式(Command Pattern)
- 命令模式(Command Pattern)
- 命令模式(command pattern)
- 命令模式(Command Pattern)。
- 命令模式(Command Pattern)
- 命令模式(Command Pattern)
- Command Pattern(命令模式)
- 命令模式 Command Pattern
- 命令模式【Command Pattern】
- 命令模式(Command Pattern)
- 命令模式(Command Pattern)
- android添加默认appwidget
- GPS最新资料大全
- WGSI 简介
- 蓄水池抽样
- 黑马程序员_五、继承、多态、抽象类及接口
- 命令模式(Command Pattern)
- mac系统故障排除几个基本方法
- 02_Spring3.2_属性类型构造注入
- Android中Button,ImageButton,ImageView之间的区别
- C#UDP通信
- Log4j日志
- Android安全分析挑战:运行时篡改Dalvik字节码 .
- 设计模式之Observer模式
- 归并排序