• 命令模式


    命令模式:命令模式将发出请求的对象和执行请求的对象解耦,在被解耦的两者之间是通过命令对象进行沟通的,命令对象封装了接受者和一个或者一组动作。

    遥控器控制房间内的电器:现有一个遥控器现有两排按钮,每排七个,第一排可以控制电器的打开,对应的第二排可以控制电器的关闭。

                                     每个电器都有自己的 打开和关闭的方法。

    在这个例子中遥控器是发出请求的对象,而电器是执行请求的对象,为了不在遥控器对象的类中直接耦合电器对象,采用命令模式来解耦两者。

    类图:

    Command接口:

    public interface Command {
        
        public void execute();      // 提供一个 执行的方法
        
    }

    命令对象 LightOnCommand类 实现Command接口:

    public class LightOnCommand implements Command {
        private Light  light;                // 保存 执行请求的对象 的变量
        
        public void setLight(Light light)
        {
            this.light = light;
        }
        @Override
        public void execute() {
            
            light.on();                     //调用 执行请求的对象 的方法 来完成请求
        }
    
    }

    命令对象 LightOffCommand类  实现Command接口:

    执行请求的对象  Light类 提供了on()和off()方法:

    public class Light {
       public void on()                 
       {
           System.out.println("打开灯。。。。");
       }
       public void off()
       {
           System.out.println("关闭灯。。。。");
       }
    }

    发送请求的对象  RemoteControl类 :

    public class RemoteControl {           //模拟最简单的情况 , 一个遥控器只有两个按钮 ,一个按钮打开灯 ,另一个按钮关闭灯
       private Command oncommand;          //保存  打开命令对象   的变量
       private Command offcommand;         //保存  关闭命令对象   的变量
       
       public void setCommand(Command oncommand,Command offcommand)
       {
           this.oncommand = oncommand;
           this.offcommand = offcommand;
       }
       public void buttonOn()    //打开灯的按钮  按下后 执行 打开命令对象的execute()方法
       {
           this.oncommand.execute();
       }
       public void buttoOff()   //关闭灯的按钮  按下后 执行 关闭命令对象的execute()方法
       {
           this.offcommand.execute();
       }
      
    }

    最后 ,写一个测试类 ,提供入口main方法:

  • 相关阅读:
    C#开源实现MJPEG流传输
    EntityFramework中使用Repository装饰器
    Lambda应用设计模式
    Lambda表达式的前世今生
    那些年黑了你的微软BUG
    敏捷软件开发揭秘
    SVN previous operation has not finished
    NodeJS+Express开发web,为什么中文显示为乱码
    使用Visual Studio 调试断点不起作用的问题解决办法 调试Revit CAD 不能进入断点
    openFileDialog的Filter属性设置
  • 原文地址:https://www.cnblogs.com/wangliyue/p/4207869.html
Copyright © 2020-2023  润新知