chapter06_封装调用——命令模式

  • (1) 命令模式可以将方法调用封装起来

    (2) 命令模式将动作的请求者动作的执行者对象中解耦

  • 所有的命令对象实现相同的命令接口, 用来执行和撤销命令

      public interface Command {
    
          void execute();
    
          void undo();
      }
    
  • 具体的命令实现类在构造函数中传入动作的接收者

      public class LightOnCommand implements Command {
    
          private final Light light;
    
          public LightOnCommand(Light light) {
      
              this.light = light;
          }
    
          public void execute() {
              light.on();
          }
    
          public void undo() {
              light.off();
          }
      }
    

    在LightOnCommand命令对象中, 动作的接收者是Light

    Light.java

      public class Light {
    
          ...
    
          public void on() {
      
              System.out.println("Light is on");
          }
    
          public void off() {
      
              System.out.println("Light is off");
          }
    
          ...
      }
    

    在动作的请求者对象中, 只需传入命令对象, 无需传入动作的接收者对象, 这样就实现了动作的请求者和动作的接收者的解耦

    RemoteControl.java

      public class RemoteControl {
    
          private Command onCommand;
          private Command offCommand;
    
          public RemoteControl() {
    
              onCommands = new NoCommand();
              offCommands = new NoCommand();
          }
    
          public void setCommand(Command onCommand, Command offCommand) {
    
              this.onCommand = onCommand;
              this.offCommand = offCommand;
          }
    
          public void onButtonWasPushed() {
    
              onCommand.execute();
          }
    
          public void offButtonWasPushed() {
    
              offCommand.execute();
          }
    
          ...
      }
    
  • 命令模式

    将命令封装成对象, 以便使用不同的请求、队列或日志来参数化其他对象

  • 利用命令模式实现撤销操作

    请求调用者内部封装一条undoCommand命令, 每次调用命令时更新

  • 命令模式的实际用途

    (1) 线程池和Callable

    (2) 日志系统

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值