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 相关文章推荐
javascript cookies 设置、读取、删除实例代码
Apr 12 Javascript
Jquery的hover方法让鼠标经过li时背景变色
Sep 06 Javascript
JS中取二维数组中最大值的方法汇总
Apr 17 Javascript
Bootstrap基本插件学习笔记之折叠(22)
Dec 08 Javascript
过期软件破解办法实例详解
Jan 04 Javascript
Javascript中的神器——Promise
Feb 08 Javascript
利用canvas实现的加载动画效果实例代码
Jul 05 Javascript
如何解决js函数防抖、节流出现的问题
Jun 17 Javascript
封装微信小程序http拦截器过程解析
Aug 13 Javascript
微信小程序实现点击导航条切换页面
Nov 19 Javascript
如何利用JavaScript实现二叉搜索树
Apr 02 Javascript
AJAX实现指定部分页面刷新效果
Oct 16 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
source.php查看源文件
2006/12/09 PHP
使用php批量删除数据库下所有前缀为prefix_的表
2014/06/09 PHP
php中rename函数用法分析
2014/11/15 PHP
PHP将进程作为守护进程的方法
2015/03/19 PHP
Codeigniter检测表单post数据的方法
2015/03/21 PHP
如果文字过长,则将过长的部分变成省略号显示
2006/06/26 Javascript
jquery tools 系列 scrollable学习
2009/09/06 Javascript
jQuery客户端分页实例代码
2013/11/18 Javascript
request请求获取参数的实现方法(post和get两种方式)
2016/09/27 Javascript
jQuery DateTimePicker 日期和时间插件示例
2017/01/22 Javascript
JavaScrpt判断一个数是否是质数的实例代码
2017/06/11 Javascript
学习使用ExpressJS 4.0中的新Router的用法
2018/11/06 Javascript
基于Vue和Element-Ui搭建项目的方法
2019/09/06 Javascript
vue实现点击追加选中样式效果
2019/11/01 Javascript
在js文件中引入(调用)另一个js文件的三种方法
2020/09/11 Javascript
[51:20]完美世界DOTA2联赛PWL S2 Magma vs PXG 第一场 11.28
2020/12/01 DOTA
[43:43]完美世界DOTA2联赛PWL S2 FTD.C vs Rebirth 第一场 11.22
2020/11/24 DOTA
[01:04:09]DOTA2-DPC中国联赛 正赛 iG vs VG BO3 第二场 2月2日
2021/03/11 DOTA
scrapy爬虫完整实例
2018/01/25 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
python的等深分箱实例
2019/11/22 Python
使用Keras建立模型并训练等一系列操作方式
2020/07/02 Python
python高级特性简介
2020/08/13 Python
PyCharm 2020.1版安装破解注册码永久激活(激活到2089年)
2020/09/24 Python
CSS3 Backgrounds属性相关介绍
2011/05/11 HTML / CSS
Lulu Guinness露露·吉尼斯官网:红唇包
2019/02/03 全球购物
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
优秀毕业生自我鉴定
2014/01/19 职场文书
中文教师求职信
2014/02/22 职场文书
公证委托书模板
2014/04/03 职场文书
2014年销售部工作总结
2014/12/01 职场文书
开平碉楼导游词
2015/02/06 职场文书
学术研讨会主持词
2015/07/04 职场文书
python 实现定时任务的四种方式
2021/04/01 Python
python缺失值的解决方法总结
2021/06/09 Python
Spring Cloud Netflix 套件中的负载均衡组件 Ribbon
2022/04/13 Java/Android