美文网首页
命令模式(Command)

命令模式(Command)

作者: 森码 | 来源:发表于2018-08-05 16:58 被阅读27次
  1. 定义
    将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。
  2. 类图


    Command
  3. 例子
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<>();

   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.");
      }
   }
}

补充

  • 命令模式的特点就是把 动作 或者 行为 进行封装和抽象,一般我们可能很难把代码抽象到这个程度或者想到这个模式,因为并不是每个需求都是"遥控器"。

  • 命令模式与状态模式有一定的相似点,不过,命令模式强调自己的动作,而状态模式强调『主体』的状态。

相关文章

  • 命令模式(Command Pattern)

    命令模式 命令模式(Command Pattern)又称为行动(Action)模式或交易(Transaction)...

  • Command模式

    命令模式(Command) 命令模式属于对象的行为模式。命令模式又称为行动(Action)模式或交易(Tran...

  • 8.命令模式 命令模式即Command模式,此模式通过被称为Command的类封装了对目标对象的调用行为以及调用参...

  • 图解GoF 23种设计模式

    Chain of Responsibility(职责链模式) Command(命令模式) Interpreter(...

  • 命令模式(Command)

    本文参考自:《JAVA设计模式》之命令模式(Command) 1. 作用 命令模式属于对象的行为模式。命令模式又称...

  • iOS模式设计之--行为型: 9、命令模式(Command)

    iOS模式设计之--行为型: 9、命令模式(Command)

  • vi/vim操作手册

    vi/vim 分为三种模式:命令模式(Command mode),输入模式(Insert mode)和底线命令模式...

  • vim常见命令

    vim的三种模式: 命令模式(Command mode) 插入模式(Insert mode) 底行命令模式(Las...

  • AgilePPP 第 13-17 章 笔记

    设计模式 COMMAND 模式 COMMAND模式对命令发送者和接收者完全解耦,只关心收到的命令类型并执行相应的操...

  • VI命令汇总

    命令行模式command mode 插入模式(Insert mode) 底行模式

网友评论

      本文标题:命令模式(Command)

      本文链接:https://www.haomeiwen.com/subject/uxbbvftx.html