JavaScript设计模式之命令模式

 更新时间:2022年06月23日 11:32:27   作者:​ 前端若水   ​  
这篇文章主要介绍了JavaScript设计模式之命令模式,命令设计模式是由发令者、执行者、命令对象三部分构成,文章由此展开详细的内容介绍,需要的小伙伴可以参考一下

前言

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

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

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

生活中的命令设计模式

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

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

工作中的命令设计模式

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

我们来做一个需求,该需求是能够一键封锁账户权限和一键解封账户权限

页面结构,写上俩个权限按钮进行控制权限开启与关闭

   <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('权限已关闭')
}

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

到此这篇关于JavaScript设计模式之命令模式的文章就介绍到这了,更多相关JavaScript 命令模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • JavaScript头像上传插件源码分享

    JavaScript头像上传插件源码分享

    这篇文章主要为大家分享介绍了JavaScript头像上传插件源码,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-03-03
  • 微信小程序开发中var that =this的用法详解

    微信小程序开发中var that =this的用法详解

    这篇文章主要介绍了微信小程序开发中var that =this的用法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-01-01
  • js实现iframe动态调整高度的代码

    js实现iframe动态调整高度的代码

    iframe,尤其是不带边框的iframe因为能和网页无缝的结合从而不刷新页面的情况下更新页面的部分数据成为可能,可是iframe的大小却不像层那样可以“伸缩自如”,所以带来了使用上的麻烦,给iframe设置高度的时候多了也不好,少了更是不行,现在,让我来告诉大家一种iframe动态调整高度的方法,主要是以下JS函数:
    2008-01-01
  • JS字符串函数扩展代码

    JS字符串函数扩展代码

    JS字符串函数扩展代码,大家可以参考下prototype的使用方法,扩展自己的字符串处理函数。
    2011-09-09
  • uniapp微信小程序授权登录并获取手机号的方法

    uniapp微信小程序授权登录并获取手机号的方法

    这篇文章主要给大家介绍了关于uniapp微信小程序授权登录并获取手机号的相关资料,我们在uniapp开发微信小程序的过程中,经常需要在微信端登录,需要的朋友可以参考下
    2023-06-06
  • 微信小程序实现井字棋游戏

    微信小程序实现井字棋游戏

    这篇文章主要为大家详细介绍了微信小程序实现井字棋游戏,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2022-05-05
  • 浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题

    浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题

    下面小编就为大家带来一篇浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-10-10
  • Jquery调用iframe父页面中的元素及方法

    Jquery调用iframe父页面中的元素及方法

    对于javascript操作iframe父级页面元素的方法,大家应该都非常清楚了,下面结合当前非常流行的jquery分享一下如何使用jquery查找和操作iframe父级页面元素的实现代码。
    2016-08-08
  • 获取Javscript执行函数名称的方法

    获取Javscript执行函数名称的方法

    获取Javscript执行函数名称的方法...
    2006-12-12
  • JavaScript多种图形实现代码实例

    JavaScript多种图形实现代码实例

    这篇文章主要介绍了JavaScript多种图形实现代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2020-06-06

最新评论