• java命令模式


    命令模式(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.");
          }
       }
    }

    命令模式的长处

    • 减少系统的耦合度。
    • 新的命令能够非常easy地增加到系统中。
    • 能够比較easy地设计一个命令队列和宏命令(组合命令)。
    • 能够方便地实现对请求的Undo和Redo。

    命令模式的缺点

    • 使用命令模式可能会导致某些系统有过多的详细命令类。由于针对每个命令都须要设计一个详细命令类,因此某些系统可能须要大量详细命令类,这将影响命令模式的使用。








  • 相关阅读:
    汉语-谚语:条条大路通罗马
    汉语-词语:缱绻
    几何-对称图形:中心对称图形
    java解析获取Excel中的数据--同时兼容2003及2007
    如何使gcc输出搜索到的头文件路径?
    如何使tmux可以像vi一样操作(如快速跳转到某一行)?
    如何使tmux能够使用鼠标上下滚动?
    ID3v2: 为aac格式的音频文件添加ID3v2 Header
    FFmpeg: 利用FFmpeg提取音频文件中的metadata
    C语言:变长结构体
  • 原文地址:https://www.cnblogs.com/gccbuaa/p/7232742.html
Copyright © 2020-2023  润新知