javascript设计模式 ? 策略模式原理与用法实例分析


Posted in Javascript onApril 21, 2020

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

介绍:策略模式中可以定义一些独立的类来封装不同的算法,每一个类封装一种具体的算法。在这里,每一种算法的封装都可以称之为一种策略。策略模式的主要目的是将算法的定义与使用分开。

定义:定义一系列算法类,将每一个算法封装起来,并让它们可以相互替换。策略模式让算法独立与使用它的客户而变化,也称为政策模式。策略模式是一种对象行为型模式。

场景:使用策略模式实现一个加减乘除的工具类,将四个算法进行封装。

示例:

var AddStrategy = function(){
  this.caculate = function(num1, num2){
    return num1 + num2;
  }
}
 
var SubStrategy = function(){
  this.caculate = function(num1, num2){
    return num1 - num2;
  }
}
 
var MulStrategy = function(){
  this.caculate = function(num1, num2){
    return num1 * num2;
  }
}
 
var DivStrategy = function(){
  this.caculate = function(num1, num2){
    return num1 / num2;
  }
}
 
var Context = function(strategy){
  var _strategy = strategy;
 
  this.executeStrategy = function(num1, num2){
    return _strategy.caculate(num1, num2)
  }
}
var add = new Context(new AddStrategy());
var sub = new Context(new SubStrategy());
var mul = new Context(new MulStrategy());
var div = new Context(new DivStrategy());
 
console.log('1 + 2 = ' + add.executeStrategy(1, 2));
console.log('5 - 1 = ' + sub.executeStrategy(5, 1));
console.log('3 * 2 = ' + mul.executeStrategy(3, 2));
console.log('8 / 2 = ' + div.executeStrategy(8, 2));
 
// 1 + 2 = 3
// 5 - 1 = 4
// 3 * 2 = 6
// 8 / 2 = 4

在这个例子里,Context称之为环境类,环境类是使用算法的角色,他在解决某个问题时可以采用多种策略。我们的例子里,根据传递的策略不同,导致Context作出不同的处理方式。
DivStrategy,MulStrategy,SubStrategy,AddStrategy称为策略类,用来实现具体策略。

策略模式总结:

优点:

* 提供了开关原则的完美支持,可以再不修改原有系统基础上进行扩展
* 策略模式提供了一种可以替换继承关系的办法
* 使用策略模式可以避免多重条件选择语句。

缺点:

* 客户端必须知道所有的策略类,并自行选择需要使用哪一个策略
* 策略模式将造成系统产生很多策略类,任何细小的变化都导致系统需要新增一个新的策略类
* 客户端每次只能选择使用一个策略类

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

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

Javascript 相关文章推荐
javascript iframe内的函数调用实现方法
Jul 19 Javascript
jQuery find和children方法使用
Jan 31 Javascript
基于JavaScript 数据类型之Boolean类型分析介绍
Apr 19 Javascript
js中创建对象的几种方式示例介绍
Jan 26 Javascript
angularjs指令中的compile与link函数详解
Dec 06 Javascript
超赞的jQuery图片滑块动画特效代码汇总
Jan 25 Javascript
JavaScript通过代码调用Flash显示的方法
Feb 02 Javascript
浅析jQuery 3.0中的Data
Jun 14 Javascript
vue-router 源码之实现一个简单的 vue-router
Jul 02 Javascript
JS检索下拉列表框中被选项目的索引号(selectedIndex)
Dec 17 Javascript
js仿360开机效果
Dec 26 Javascript
JavaScript实现多球运动效果
Sep 07 Javascript
javascript设计模式 ? 备忘录模式原理与用法实例分析
Apr 21 #Javascript
VUE+elementui组件在table-cell单元格中绘制微型echarts图
Apr 20 #Javascript
Vue的全局过滤器和私有过滤器的实现
Apr 20 #Javascript
深入浅析JavaScript中的in关键字和for-in循环
Apr 20 #Javascript
vue实现购物车功能(商品分类)
Apr 20 #Javascript
vue实现淘宝购物车功能
Apr 20 #Javascript
javascript利用键盘控制小方块的移动
Apr 20 #Javascript
You might like
php获取用户IPv4或IPv6地址的代码
2012/11/15 PHP
Yii支持多域名cors原理的实现
2018/12/05 PHP
搭建PhpStorm+PhpStudy开发环境的超详细教程
2020/09/17 PHP
jQuery中jqGrid分页实现代码
2011/11/04 Javascript
JQuery中SetTimeOut传参问题探讨
2013/05/10 Javascript
jquery中插件实现自动添加用户的具体代码
2013/11/15 Javascript
以JSON形式将JS中Array对象数组传至后台的方法
2014/01/06 Javascript
使用jQuery设置disabled属性与移除disabled属性
2014/08/21 Javascript
原生javascript实现隔行换色
2015/01/04 Javascript
JavaScript中三种异步上传文件方式
2016/03/06 Javascript
Jquery Easyui对话框组件Dialog使用详解(14)
2016/12/19 Javascript
jQuery居中元素scrollleft计算方法示例
2017/01/16 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
微信小程序基于slider组件动态修改标签透明度的方法示例
2017/12/04 Javascript
vue 实现websocket发送消息并实时接收消息
2019/12/09 Javascript
javascript设计模式 ? 命令模式原理与用法实例分析
2020/04/20 Javascript
Vue 中使用lodash对事件进行防抖和节流操作
2020/07/26 Javascript
VUE子组件向父组件传值详解(含传多值及添加额外参数场景)
2020/09/01 Javascript
django将图片上传数据库后在前端显式的方法
2018/05/25 Python
机器学习之KNN算法原理及Python实现方法详解
2018/07/09 Python
pyqt5 lineEdit设置密码隐藏,删除lineEdit已输入的内容等属性方法
2019/06/24 Python
Python matplotlib生成图片背景透明的示例代码
2019/08/30 Python
下载官网python并安装的步骤详解
2019/10/12 Python
Spring实战之使用util:命名空间简化配置操作示例
2019/12/09 Python
Python3爬虫中识别图形验证码的实例讲解
2020/07/30 Python
html5 localStorage本地存储_动力节点Java学院整理
2017/07/06 HTML / CSS
香港钟表珠宝首饰商城:OneMallTime网摩间
2016/10/14 全球购物
英国泰坦旅游网站:全球陪同游览,邮轮和铁路旅行
2016/11/29 全球购物
《春到梅花山》教学反思
2014/04/16 职场文书
幼儿园家长安全责任书
2014/07/22 职场文书
我的中国梦演讲稿300字
2014/08/19 职场文书
流动人口婚育证明
2014/10/19 职场文书
房屋维修申请报告
2015/05/18 职场文书
PHP策略模式写法
2021/04/01 PHP
Python import模块的缓存问题解决方案
2021/06/02 Python
详解Flutter网络请求Dio库的使用及封装
2022/04/14 Java/Android