javascript设计模式 ? 命令模式原理与用法实例分析


Posted in Javascript onApril 20, 2020

本文实例讲述了javascript设计模式 ? 命令模式原理与用法。分享给大家供大家参考,具体如下:

介绍:命令模式是一种数据驱动的设计模式,将请求以命令的形式包裹在对象中,并传递给调用对象。命令模式的核心在于引入了命令类,通过命令类来降低发送者和接受者的耦合度。

定义:将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。

场景:我们通过买卖股票的场景来实现下命令模式,

示例:

var Stock = function(){
  this.name = 'baidu';
  this.quantity = 100;
  this.buy = function(){
    console.log('购买了:' + this.quantity + '股' + this.name);
  }
  this.sell = function(){
    console.log('卖出了:' + this.quantity + '股' + this.name);
  }
}
 
var BuyStock = function(stock){
  this.stock = stock;
 
  this.execute = function(){
    this.stock.buy();
  }
}
 
var SellStock = function(stock){
  this.stock = stock;
 
  this.execute = function(){
    this.stock.sell();
  }
}
 
var Broker = function(){
  this.orderList = [];
 
  this.takeOrder = function(order){
    this.orderList.push(order);
  }
  this.placeOrders = function(){
    this.orderList.map(function(item){
      item.execute();
    })
    this.orderList = [];
  }
}
 
var stock = new Stock();
var buyStock = new BuyStock(stock);
var sellStock = new SellStock(stock);
 
var broker = new Broker();
broker.takeOrder(buyStock);
broker.takeOrder(sellStock);
broker.placeOrders();
// 购买了:100股baidu
// 卖出了:100股baidu

这个例子里面SellStock,BuyStock为命令类,执行实际的命令。Broker用来接收命令,并在指定的时机执行命令。Stock为请求受体,

回头看下定义:sellStock,buyStock就是将命令封装好的对象,你可以通过对象的execute方法执行该命令。通过扩展placeOrders方法可以支持请求队列或者记录请求日志,以及支持可撤销等操作

命令模式总结:

优点:
* 降低系统耦合度
* 新的命令很容易的加入到系统中

缺点:
* 使用命令模式可能会导致某些系统有过多的具体命令类

适用场景:
* 系统需要将请求调用者和请求接受者解耦

感兴趣的朋友可以使用在线HTML/CSS/JavaScript代码运行工具:http://tools.3water.com/code/HtmlJsRun测试上述代码运行效果。

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
JSON 学习之完全手册 图文
May 29 Javascript
Javascript & DHTML 实例编程(教程)基础知识
Jun 02 Javascript
基于jQuery的前端数据通用验证库
Aug 08 Javascript
js运动动画的八个知识点
Mar 12 Javascript
jQuery+ajax实现滚动到页面底部自动加载图文列表效果(类似图片懒加载)
Jun 07 Javascript
JavaScrpt判断一个数是否是质数的实例代码
Jun 11 Javascript
JS点击缩略图整屏居中放大图片效果
Jul 04 Javascript
js求数组中全部数字可拼接出的最大整数示例代码
Aug 25 Javascript
详细分析单线程JS执行问题
Nov 22 Javascript
Vue项目History模式404问题解决方法
Oct 31 Javascript
基于Vue el-autocomplete 实现类似百度搜索框功能
Oct 25 Javascript
JavaScript中的this/call/apply/bind的使用及区别
Mar 06 Javascript
JS实现横向跑马灯效果代码
Apr 20 #Javascript
vue2.x数组劫持原理的实现
Apr 19 #Javascript
vue2.x 对象劫持的原理实现
Apr 19 #Javascript
基于js判断浏览器是否支持webGL
Apr 18 #Javascript
JavaScript对象字面量和构造函数原理与用法详解
Apr 18 #Javascript
javascript 内存模型实例详解
Apr 18 #Javascript
javascript-hashchange事件和历史状态管理实例分析
Apr 18 #Javascript
You might like
PHP文件生成的图片无法使用CDN缓存的解决方法
2015/06/20 PHP
Javascript 生成指定范围数值随机数
2009/01/09 Javascript
C#中TrimStart,TrimEnd,Trim在javascript上的实现
2011/01/17 Javascript
JS中数组Array的用法示例介绍
2014/02/20 Javascript
jQuery filter函数使用方法
2014/05/19 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
JS for循环中i++ 和 ++i的区别介绍
2016/07/20 Javascript
jQuery实现输入框邮箱内容自动补全与上下翻动显示效果【附demo源码下载】
2016/09/20 Javascript
jQuery插件JWPlayer视频播放器用法实例分析
2017/01/11 Javascript
微信小程序 图片边框解决方法
2017/01/16 Javascript
微信小程序 标签传入数据
2017/05/08 Javascript
微信小程序对接七牛云存储的方法
2017/07/30 Javascript
在Js页面通过POST传递参数跳转到新页面详解
2017/08/25 Javascript
laravel5.4+vue+element简单搭建的示例代码
2017/08/29 Javascript
原生js封装运动框架的示例讲解
2017/10/01 Javascript
JS与CSS3实现图片响应鼠标移动放大效果示例
2018/05/04 Javascript
详解Vue实战指南之依赖注入(provide/inject)
2018/11/13 Javascript
微信小程序使用前置摄像头拍照
2020/10/22 Javascript
JavaScript实现移动端拖动元素
2020/11/24 Javascript
[00:35]DOTA2上海特级锦标赛 VP战队宣传片
2016/03/04 DOTA
[00:33]2016完美“圣”典风云人物:Sccc宣传片
2016/12/03 DOTA
[50:58]2018DOTA2亚洲邀请赛3月29日 小组赛A组OpTic VS Newbee
2018/03/30 DOTA
python实现类似ftp传输文件的网络程序示例
2014/04/08 Python
用Python编写生成树状结构的文件目录的脚本的教程
2015/05/04 Python
Python基于动态规划算法计算单词距离
2015/07/25 Python
python中的break、continue、exit()、pass全面解析
2017/08/05 Python
python print出共轭复数的方法详解
2019/06/25 Python
Python 类属性与实例属性,类对象与实例对象用法分析
2019/09/20 Python
django ListView的使用 ListView中获取url中的参数值方式
2020/03/27 Python
Python中免验证跳转到内容页的实例代码
2020/10/23 Python
外语系毕业生找工作的求职信
2013/11/28 职场文书
博士毕业生自我鉴定范文
2014/04/13 职场文书
四查四看自我剖析材料
2014/09/19 职场文书
建筑专业毕业生求职信
2014/09/30 职场文书
2014年政工师工作总结
2014/12/18 职场文书
Nginx禁止ip访问或非法域名访问
2022/04/07 Servers