设计模式之命令模式
来源:互联网 发布:php怎么写html 编辑:程序博客网 时间:2024/06/06 08:42
命令模式定义:是一个高内聚的模式,将一个请求封装成一个对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复操作工作。
优点:
1、类间解耦。
调用者角色与接受者角色(light)之间没有依赖,调用者只需要调用Command的exec方法,不需要知道是那一个接受者执行的。
2、可扩展性。
3、可以和其他模式结合使用。
结合责任链,实现命令族解析任务。
结合模版方法模式,可以减少Command子类的膨胀问题。
缺点:
那就是类膨胀问题。
类图如下:
代码实现如下:
light类:
package com.designpatterns.command;public class Light {public void on() {System.out.println("Light is on");}public void off() {System.out.println("Light is off");}}
Command抽象类:
package com.designpatterns.command;public interface Command {public Light light = new Light();public void execute(); public void undo(); }
LightOnCommand类:
package com.designpatterns.command;public class LightOnCommand implements Command {@Overridepublic void execute() {light.on();}@Overridepublic void undo() {light.off();}}
LightOffCommand类:
package com.designpatterns.command;public class LightOffCommand implements Command {@Overridepublic void execute() {light.off();}@Overridepublic void undo() {light.on();}}
NoCommand类:
package com.designpatterns.command;public class NoCommand implements Command {@Overridepublic void execute() {}@Overridepublic void undo() {}}
控制类:
package com.designpatterns.command;public class SimepleRemoteControl {private Command[] onComands;private Command[] offComands;private Command undoCommand;public SimepleRemoteControl() {onComands = new Command[7];offComands = new Command[7];Command noCommand = new NoCommand();for (int i = 0; i < 7; i++) {onComands[i] = noCommand;offComands[i] = noCommand;}undoCommand = noCommand;}public void setCommand(int slot, Command onCommand, Command offCommand) {onComands[slot] = onCommand;offComands[slot] = offCommand;}public void onButtonWasPressed(int slot) {onComands[slot].execute();undoCommand=onComands[slot];}public void offButtonWasPressed(int slot) {offComands[slot].execute();undoCommand=offComands[slot];}public void undoButtonWasPushed(){undoCommand.undo();}}
测试类:
package com.designpatterns.command;public class Main {public static void main(String[] args) {SimepleRemoteControl simepleRemoteControl = new SimepleRemoteControl();LightOnCommand lightOnCommand = new LightOnCommand();LightOffCommand lightOffCommand = new LightOffCommand();simepleRemoteControl.setCommand(0, lightOnCommand, lightOffCommand);System.out.println("开灯!");simepleRemoteControl.onButtonWasPressed(0);System.out.println("关灯!");simepleRemoteControl.offButtonWasPressed(0);System.out.println("撤销上一步操作!");simepleRemoteControl.undoButtonWasPushed();}}
在上面的代码中通过添加undo方法,实现了撤销上一步操作。
这就是命令模式。
参考资料:
1、设计模式之禅
2、Head First 设计模式
备注:
转载请注明出处
http://blog.csdn.net/wsyw126/article/details/51317887
by WSYW126
0 0
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之--命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之--命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之命令模式
- 设计模式之 命令模式
- 用栈实现两位数表达式的求值
- jQuery选择器—表单选择器
- 海盗分金币
- Unity3D——主角面朝方向一定区域内对象角度计算
- java IO流
- 设计模式之命令模式
- 路径问题
- 字符串匹配之KMP算法
- caj文件转换为pdf
- 共同学习Java源代码--常用工具类--StringBuffer(三)
- Spark组件之GraphX学习16--最短路径ShortestPaths
- 论开源<2>---开源运动的国家目标
- 《剑指offer》-数值的整数次方
- app图标和启动图以及Images.xcassets