zoukankan      html  css  js  c++  java
  • 命令模式

    一、命令模式:命令模式将“请求”封装成对象。以便使用不同的请求队列或者日志来参数化其他对象,命令模式也支持可撤销的操作。

        (1)命令模式将发出请求的对象和执行请求的对象解耦

        (2)在被解耦的两者之间通过命令对象进行沟通的,命令对象接受者和一个或一组动作。

        (3)调用者通过调用命令对象的execute()发出请求,这会使得接受者的动作被调用。

        (4)调用者可以接受命令当做参数,甚至运行是动态的执行。

    二、涉及角色请求调用者(会传入命令对象,用来发送请求),请求接受者(实际命令执行者),命令接口(所有具体命令实现这个接口),具体命令(将请求的接受者传递给命令对象)。

    具体实例:

          (1) 命令接口

    1 public interface Command {
    2     public void execute();
    3 }

        (2) 具体命令

     1 public class LightOnCommand implements Command{
     2     private Light light;
     3     
     4     public LightOnCommand(Light light){
     5         this.light = light;
     6     }
     7     
     8     @Override
     9     public void execute() {
    10         light.on();
    11     }
    12 }

       (3) 命令接受者

    1 public class Light {
    2     
    3     public void on(){
    4         System.out.println("电灯被打开");
    5     }
    6 }

      (4) 命令调用者

     1 public class SimpleRemoteControl {
     2     private Command slot;
     3     
     4     public SimpleRemoteControl(){}
     5     
     6     public void setCommand(Command slot){
     7         this.slot = slot;
     8     }
     9     public void buttonWasPressed(){
    10         slot.execute();
    11     }
    12     
    13 }

    (5) 客户端

     1 public class SimpleRemoteControl {
     2     private Command slot;
     3     
     4     public SimpleRemoteControl(){}
     5     
     6     public void setCommand(Command slot){
     7         this.slot = slot;
     8     }
     9     public void buttonWasPressed(){
    10         slot.execute();
    11     }
    12     

    三、命令撤销

       调用Command中undo()方法,即命令对象中除了维持接收者对象的引用,同时记录之前执行的命令。来达到撤销的目的。

    四、宏命令

       为了一次执行多个命令,可以建立宏命令对象,宏对象中保持了命令的数组,并可以一次执行和撤销相应的命令。

  • 相关阅读:
    jmeter使用
    docker 制作ssh镜像
    docker 制作自定义的nginx镜像
    docker部署sharding-proxy
    ftp相关
    关于GDAL打开hfa大文件的问题[转]
    C++实现类似反射模式
    C#下使用GDAL库
    全球DEM、遥感图像、矢量图像、GIS数据下载
    DEM数据及其他数据下载
  • 原文地址:https://www.cnblogs.com/mxmbk/p/5103454.html
Copyright © 2011-2022 走看看