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

 更新时间:2020年04月20日 08:33:09   作者:李小强  
这篇文章主要介绍了javascript设计模式 – 命令模式,结合实例形式分析了javascript命令模式相关概念、原理、用法及操作注意事项,需要的朋友可以参考下

本文实例讲述了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.jb51.net/code/HtmlJsRun测试上述代码运行效果。

更多关于JavaScript相关内容感兴趣的读者可查看本站专题:《javascript面向对象入门教程》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结

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

相关文章

  • JavaScript的模块化:封装(闭包),继承(原型) 介绍

    JavaScript的模块化:封装(闭包),继承(原型) 介绍

    在复杂的逻辑下, JavaScript 需要被模块化,模块需要封装起来,只留下供外界调用的接口。闭包是 JavaScript 中实现模块封装的关键,也是很多初学者难以理解的要点
    2013-07-07
  • 一文教你用JavaScript制作个简单的大转盘游戏

    一文教你用JavaScript制作个简单的大转盘游戏

    日常生活中,我们经常会见到形形色色的抽奖活动,例如九宫格、大转盘等等……本文就来教大家如何利用JavaScript制作个简单的大转盘游戏,感兴趣的可以了解一下
    2023-02-02
  • 基于javascript实现tab切换特效

    基于javascript实现tab切换特效

    这篇文章主要介绍了基于javascript实现tab切换特效的相关资料,具有一定的参考价值,需要的朋友可以参考下
    2016-03-03
  • JavaScript实现给浮点数添加千分位逗号的多种方法

    JavaScript实现给浮点数添加千分位逗号的多种方法

    JavaScript 是一门强大的前端语言,在处理数值格式化时提供了多种方法,在开发过程中,我们经常需要将大数字格式化,使其更具可读性,例如,将 12000000.11 转换为 12,000,000.11,本文将详细介绍 JavaScript 中如何实现这种格式化,需要的朋友可以参考下
    2025-04-04
  • 基于JavaScript+HTML编写一个日期选择插件

    基于JavaScript+HTML编写一个日期选择插件

    在现代Web应用程序中,日期选择器是一个非常常见的组件,用户可以使用它来选择特定的日期,在本篇文章中,我们将使用JavaScript和HTML来创建一个简单但功能强大的日期选择插件,这个日期选择插件是比较考验Js基本功的,需要的朋友可以参考下
    2023-10-10
  • 用原生JS对AJAX做简单封装的实例代码

    用原生JS对AJAX做简单封装的实例代码

    下面小编就为大家带来一篇用原生JS对AJAX做简单封装的实例代码。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2016-07-07
  • javascript实时显示当天日期的方法

    javascript实时显示当天日期的方法

    这篇文章主要介绍了javascript实时显示当天日期的方法,可实时显示当前日期及星期的功能,非常简单实用,需要的朋友可以参考下
    2015-05-05
  • Web版彷 Visual Studio 2003 颜色选择器

    Web版彷 Visual Studio 2003 颜色选择器

    Web版彷 Visual Studio 2003 颜色选择器...
    2007-01-01
  • 在Webpack中配置别名路径的全过程

    在Webpack中配置别名路径的全过程

    在大型前端项目中,模块路径往往很长且复杂,使用相对路径不仅降低了代码可读性,还增加了维护成本,Webpack提供了配置别名路径的功能,可以通过为常用目录定义简短的别名,简化模块导入路径,本文将详细介绍如何在Webpack中配置别名路径,需要的朋友可以参考下
    2025-03-03
  • js实现点击烟花特效

    js实现点击烟花特效

    这篇文章主要介绍了js实现点击烟花特效,帮助大家更好的利用js美化网页,感兴趣的朋友可以了解下
    2020-10-10

最新评论