java命令模式
来源:互联网 发布:云计算产业的盈利模式 编辑:程序博客网 时间:2024/05/22 22:34
命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。
命令模式包含如下角色:
- Command: 抽象命令类
- ConcreteCommand: 具体命令类
- Invoker: 调用者
- Receiver: 接收者
- Client:客户类
代码
import java.util.List;import java.util.ArrayList;/* The Command interface */public interface Command { void execute();}/* The Invoker class */public class Switch { private List<Command> history = new ArrayList<Command>(); public Switch() { } public void storeAndExecute(Command cmd) { this.history.add(cmd); // optional cmd.execute(); }}/* The Receiver class */public class Light { public Light() { } public void turnOn() { System.out.println("The light is on"); } public void turnOff() { System.out.println("The light is off"); }}/* The Command for turning on the light - ConcreteCommand #1 */public class FlipUpCommand implements Command { private Light theLight; public FlipUpCommand(Light light) { this.theLight = light; } public void execute(){ theLight.turnOn(); }}/* The Command for turning off the light - ConcreteCommand #2 */public class FlipDownCommand implements Command { private Light theLight; public FlipDownCommand(Light light) { this.theLight = light; } public void execute() { theLight.turnOff(); }}/* The test class or client */public class PressSwitch { public static void main(String[] args){ Light lamp = new Light(); Command switchUp = new FlipUpCommand(lamp); Command switchDown = new FlipDownCommand(lamp); Switch mySwitch = new Switch(); try { if ("ON".equalsIgnoreCase(args[0])) { mySwitch.storeAndExecute(switchUp); } else if ("OFF".equalsIgnoreCase(args[0])) { mySwitch.storeAndExecute(switchDown); } else { System.out.println("Argument \"ON\" or \"OFF\" is required."); } } catch (Exception e) { System.out.println("Arguments required."); } }}
命令模式的优点
- 降低系统的耦合度。
- 新的命令可以很容易地加入到系统中。
- 可以比较容易地设计一个命令队列和宏命令(组合命令)。
- 可以方便地实现对请求的Undo和Redo。
命令模式的缺点
- 使用命令模式可能会导致某些系统有过多的具体命令类。因为针对每一个命令都需要设计一个具体命令类,因此某些系统可能需要大量具体命令类,这将影响命令模式的使用。
0 0
- Java模式 - Command(命令模式)
- java设计模式-命令模式
- java模式之命令模式
- java设计模式---命令模式
- java设计模式---命令模式
- 【java 设计模式】命令模式
- Java设计模式:命令模式
- java设计模式-----命令模式
- Java设计模式-命令模式
- java设计模式---命令模式
- Java设计模式--命令模式
- Java设计模式--命令模式
- JAVA设计模式-命令模式
- java设计模式,命令模式
- JAVA设计模式--命令模式
- Java设计模式-命令模式
- java设计模式-命令模式
- Java设计模式-命令模式
- 运维故障总结
- 奔跑吧小子 v1.0.3 安卓版
- OpenCV------- 对XML和YAML文件实现I/O操作
- hdu1021Fibonacci Again
- UIKit类图
- java命令模式
- 实现字典和对象转换的工具类
- js内置对象(概念)
- 当系统内存不足时如何优雅的关闭或退出应用。
- 你应该掌握的七种回归技术
- CQOI2013 棋盘游戏
- 重学Linux——笔记
- 为什么button在设置标题时要用一个方法,而不像lable一样直接用一个属性
- HDU 1249 三角形(平面分割 找规律)