一文读懂命令模式

命令模式(Command Pattern)是行为型模式,它将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

命令模式中的命令(command)指的是一个执行某些特定事情的指令。

三种角色:

  • Receiver接收者角色:该角色就是干活的角色,命令传到这里应该是被执行的
  • Command命令角色:需要执行的所有命令都在这里声明,向接收者发送对应的命令
  • Invoker调用者角色:发出命令

命令模式的使用场景

  • 不知道请求对象、接收对象、执行的操作,但是希望以解耦的方式设计程序

命令模式的实现

class Cooker{
    execute(){
      console.log('做饭');
    }
  }
  class Cleaner{
    execute(){
      console.log('保洁');
    }
  }
  class CookCommand{
    constructor(receiver){
      this.receiver = receiver;
    }
    execute(){
      this.receiver.execute();
    }
  }
  class CleanCommand{
    constructor(receiver){
      this.receiver = receiver;
    }
    execute(){
      this.receiver.execute();
    }
  }

  class Customer{
    constructor(command){
      this.command = command;
    }
    execute(){
      this.command.execute();
    }
  }

优缺点

优点

  • 降低系统的耦合度,命令迷失能将调用操作的对象与实现该操作的对象解耦
  • 增加或删除命令非常方便,采用命令模式增加与删除命令不会影响其他类,它满足开闭原则,对扩展比较灵活
  • 可以实现宏命令,命令模式可以与组合模式结合,将多个命令配成一个组合,即宏命令
  • 方便实现undo和redo操作,命令模式可以与备忘录模式结合,实现命令的撤销与恢复

缺点

  • 使用命令模式可能会导致某些系统有过多的命令类
  • 系统结构更加复杂
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容