前端设计模式之命令模式

定义

命令(Command)模式的定义如下:将一个请求封装为一个对象,使发出请求的责任和执行请求的责任分割开。这样两者之间通过命令对象进行沟通,这样方便将命令对象进行储存、传递、调用、增加与管理。

命令模式最主要的一个功能就是解耦,将发出请求的部分与执行请求的部分分离开,通过命令对象进行连接。

命令模式的结构(也可以不是类,而是方法,主要是思路而不是具体的形式):

  1. 具体命令类(Concrete Command)角色:是抽象命令类的具体实现类,连接实现者调用者,它拥有实现者对象,并通过调用实现者的功能来完成命令要执行的操作;
  2. 实现者/接收者(Receiver)角色:执行命令功能的相关操作,是具体命令对象业务的真正实现者;
  3. 调用者/请求者(Invoker)角色:是请求的发送者,它通常拥有很多的命令对象,并通过访问命令对象来执行相关请求,它不直接访问接收者。

解决的问题:

命令的发出者命令的实现 解耦,一般可能用来处理,命令的请求者比较明确,但是具体实现不确定,为了不耽误进度,将两块分开开发,或多人协作等等…
如:

  1. 开发时,一排按钮功能,与具体的实现分别为不同的人去实现,最后通过方法组合起来。
  2. 电视换台操作,电视机内部的具体实现与遥控器上按钮(请求者)分开实现,最后通过遥控器组合在一起。

实现

换台操作

// 实现者,实现者一般只需要考虑自己是如何实现的
class Receiver {
  constructor(handle) {
    this.handle = handle;
  }
}

// 请求者,可以是某个对象,或者某个
class Invoker {
  constructor() {

  }
}

// 命令类,连结实现者与请求者
class Command {
  constructor() {}
  setCommand(invoer, handle) {
    invoer.handle = handle;
  }
}


// 1. 初始化实现者,先将需求完成
const previousMethod = new Receiver(() => {
  console.log("执行了 previous");
});
const nextMethod = new Receiver(() => {
  console.log("执行了 next");
});

// 2.初始化请求者
const previousbtn = new Invoker();
const nextbtn = new Invoker();


// 3. 初始化命令类,用来连结 请求者 和 实现者
const command = new Command();
command.setCommand(previousbtn, previousMethod.handle);
command.setCommand(nextbtn, nextMethod.handle);

previousbtn.handle();
nextbtn.handle();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值