美文网首页
Head First 设计模式(6)命令模式

Head First 设计模式(6)命令模式

作者: kaiker | 来源:发表于2021-07-13 20:31 被阅读0次

    1、本章的例子——遥控器

    遥控器上有on off undo的按钮,希望遥控器可以通过按钮操控不同的产品

    遥控器需要操作非常多硬件

    需要有一种模式,将发出请求的对象和执行请求的对象分离开

    public interface Command {
      public void execute();
    }
    
    // 所有的动作变为类,实现统一的接口,将类的对象提供给给执行者,执行者调用接口中统一的方法,就达到解耦的目的。
    public class LightOnCommond implements Commond {
      Light light;
      public LightOnCommond(Light light) {
        this.light = light;
      }
      public void execute() {
        light.on();
      }
    }
    
    public class SimpleRemoteControl {
      Command slot;
    
      public SimpleRemoteControl() {}
    
      public void setCommand(Command command) {
        this.slot = command;
      }
    
      public void buttonWasPressed() {
        slot.execute();
      }
    }
    

    2、命令模式

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

    命令模式类图
    • light = Receview
    • LigntOnCommand = ConcreteCommand
    遥控器中的命令模式

    3、例子继续——取消以及带有状态的命令

    public interface Command {
      public void execute();
      public void undo();
    }
    
    public class LightOnCommand implements Command {
      Light light;
      public LightOnCommand(Light light) {this.light = light}
      public void undo() {light.off();}
    }
    
    遥控器支持undo

    如果命令存在状态,则多使用一个状态进行记录

    宏命令,一次进行多个操作。

    public class MacroCommand implments Command {
      Command[] commands;
      public MacroCommand(Command[] commands) {this.commands = commands;}
      public void execute() {
        for (int i = 0; i < commands.length; i++) {commands[i].execute();}
      }
    }
    

    当需要将发出请求的对象和执行请求的对象解耦的时候,使用命令模式。

    相关文章

      网友评论

          本文标题:Head First 设计模式(6)命令模式

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