JavaScript设计模式-命令模式(15)

简介: JavaScript设计模式-命令模式(15)

命令设计模式是由三部分构成:

  1. 发令者:用于发出命令和调用命令,不知道如何执行且谁去执行
  2. 执行者:用于提供对应接口发出的命令的处理请求,不知道谁发出的命令
  3. 命令对象:用于接收命令且处理执行者的请求

把执行操作和稍后执行事件信息存在命令对象中,通过发令者发布命令来让执行者进行执行,从而达到了执行者和发令者分离开来,使代码耦合度降低

生活中的命令设计模式


在生活中,我们去饭馆吃饭,我们先告诉服务员我们想要吃那些菜以及对菜品的要求,然后服务员通过点餐平台告知后面的厨房,厨房得知我们想要吃的菜以及对菜品的要求,厨师对菜品进行制作,做好后通知服务员,服务员把菜品给我们端上来,我们进行享用


生活中例子上,发令者就是我们,执行者是服务员,厨师制作菜品则是命令对象

工作中的命令设计模式


在工作中我们通常用于某些时候需要向某些对象发起请求,但并不知道接收者是谁,也不知道请求的操作是什么,此时可以使用命令设计模式


我们来做一个需求,该需求是能够一键封锁账户权限和一键解封账户权限页面结构,写上俩个权限按钮进行控制权限开启与关闭

<button id="onbtn">开启权限</button>
    <button id="offbtn">关闭权限</button>

我们在通过js进行过去到俩个权限控制按钮

const onBtn=document.getElementById('onbtn');
  const offBtn=document.getElementById('offbtn');

发令者

class Control {
    submit(command) {
        command.execute();
    }
}

执行者

class Power {
    powerOn() {
        console.log("开启所有权限入口");
    }
    powerOff() {
        console.log("关闭所有权限入口");
    }
}

命令对象

class PowerOnCommand {
    constructor(current) {
        this.current = current;
    }
    execute() {
        this.current.powerOn();
    }
    undo() {
        this.current.powerOff();
    }
    redo() {
        this.execute();
    }
}
class PowerOffCommand {
    constructor(current) {
        this.current = current;
    }
    execute() {
        this.current.powerOff();
    }
    undo() {
        this.current.powerOn();
    }
    redo() {
        this.execute();
    }
}

我们把各个类都创建好实例,然后再通过js给按钮绑定上事件,通过事件操作命令者


实例进行发布命令

//执行者实例
const power = new Power();
//命令对象实例
const powerOn = new PowerOnCommand(power);
const powerOff = new PowerOffCommand(power);
//发布者实例
const control = new Control();
//开启权限按钮绑定事件
onBtn.onclick=function(){
// 开启所有权限入口
    control.submit(powerOn); 
    alert('权限已开启')
}
//关闭权限按钮绑定事件
offBtn.onclick=function(){
// 关闭所有权限入口
    control.submit(powerOff); 
    alert('权限已关闭')
}

命令者设计模式由于允许我们将操作封装在对象中进行管理,所以也可以用来实现事务系统,将执行的命令保存在历史记录中,如果成功则执行最后的命令,否则根据历史记录进行回滚,对执行的操作进行撤销


坚持努力,无惧未来!


相关文章
|
2月前
|
设计模式 JavaScript 前端开发
JavaScript设计模式--访问者模式
【10月更文挑战第1天】
33 3
|
3月前
|
设计模式 存储 算法
Java设计模式-命令模式(16)
Java设计模式-命令模式(16)
|
4月前
|
设计模式 JavaScript 前端开发
从工厂到单例再到策略:Vue.js高效应用JavaScript设计模式
【8月更文挑战第30天】在现代Web开发中,结合使用JavaScript设计模式与框架如Vue.js能显著提升代码质量和项目的可维护性。本文探讨了常见JavaScript设计模式及其在Vue.js中的应用。通过具体示例介绍了工厂模式、单例模式和策略模式的应用场景及其实现方法。例如,工厂模式通过`NavFactory`根据用户角色动态创建不同的导航栏组件;单例模式则通过全局事件总线`eventBus`实现跨组件通信;策略模式用于处理不同的表单验证规则。这些设计模式的应用不仅提高了代码的复用性和灵活性,还增强了Vue应用的整体质量。
59 1
|
4月前
|
设计模式 JavaScript 前端开发
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
小白请看 JS大项目宝典:设计模式 教你如何追到心仪的女神
|
4月前
|
设计模式 存储 Java
【十二】设计模式~~~行为型模式~~~命令模式(Java)
文章详细介绍了命令模式(Command Pattern),这是一种对象行为型模式,用于将请求封装成对象,实现请求发送者与接收者的解耦,从而降低系统耦合度、提高灵活性,并支持命令的排队、记录、撤销和恢复操作。通过案例分析、结构图、时序图和代码示例,文章展示了命令模式的组成部分、实现方式和应用场景,并讨论了其优点、缺点和适用情况。
|
5月前
|
设计模式 JavaScript Go
js设计模式【详解】—— 状态模式
js设计模式【详解】—— 状态模式
83 7
|
5月前
|
设计模式 JavaScript
js设计模式【详解】—— 桥接模式
js设计模式【详解】—— 桥接模式
73 6
|
5月前
|
设计模式 JavaScript
js设计模式【详解】—— 原型模式
js设计模式【详解】—— 原型模式
53 6
|
5月前
|
设计模式 JavaScript 算法
js设计模式【详解】—— 模板方法模式
js设计模式【详解】—— 模板方法模式
48 6
|
5月前
|
设计模式 JavaScript 前端开发
JavaScript进阶 - JavaScript设计模式
【7月更文挑战第7天】在软件工程中,设计模式是解决常见问题的标准解决方案。JavaScript中的工厂模式用于对象创建,但过度使用可能导致抽象过度和缺乏灵活性。单例模式确保唯一实例,但应注意避免全局状态和过度使用。观察者模式实现了一对多依赖,需警惕性能影响和循环依赖。通过理解模式的优缺点,能提升代码质量。例如,工厂模式通过`createShape`函数动态创建对象;单例模式用闭包保证唯一实例;观察者模式让主题对象通知多个观察者。设计模式的恰当运用能增强代码可维护性。
84 0