命令模式

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

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

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

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

类图:

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方法:

原文地址:https://www.cnblogs.com/wangliyue/p/4207869.html