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 相关文章推荐
cookie.js 加载顺序问题怎么才有效
Jul 31 Javascript
javascript简单实现表格行间隔显示颜色并高亮显示
Nov 29 Javascript
javascript 回调函数详解
Nov 11 Javascript
Javascript设计模式之观察者模式(推荐)
Mar 29 Javascript
微信小程序 Image API实例详解
Sep 30 Javascript
详解angular中如何监控dom渲染完毕
Jan 03 Javascript
详解如何使用webpack+es6开发angular1.x
Aug 16 Javascript
vue 2.0项目中如何引入element-ui详解
Sep 06 Javascript
Vue组件的使用教程详解
Jan 05 Javascript
JavaScript 中的 this 工作原理
Jun 20 Javascript
支付宝小程序tabbar底部导航
Nov 06 Javascript
Layer UI表格列日期格式化及取消自动填充日期的实现方法
May 10 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
教你如何把一篇文章按要求分段
2006/10/09 PHP
PHP句法规则详解 入门学习
2011/11/09 PHP
浅析PHP原理之变量(Variables inside PHP)
2013/08/09 PHP
理清PHP在Linxu下执行时的文件权限方法
2017/06/07 PHP
javaScript对象和属性的创建方法
2007/01/15 Javascript
基于jquery的让textarea自适应高度的插件
2010/08/03 Javascript
Jquery插件之打造自定义的select标签
2011/11/30 Javascript
jquery插件corner实现圆角边框的方法
2015/03/09 Javascript
jquery插件qrcode在线生成二维码
2015/04/26 Javascript
js图片上传前预览功能(兼容所有浏览器)
2016/08/24 Javascript
浅析javaScript中的浅拷贝和深拷贝
2017/02/15 Javascript
详解vuex结合localstorage动态监听storage的变化
2018/05/03 Javascript
Mint UI组件库CheckList使用及踩坑总结
2018/12/20 Javascript
JavaScript常用内置对象用法分析
2019/07/09 Javascript
JS数组降维的实现Array.prototype.concat.apply([], arr)
2020/04/28 Javascript
JS如何在不同平台实现多语言方式
2020/07/16 Javascript
python实现的文件夹清理程序分享
2014/11/22 Python
Python中用format函数格式化字符串的用法
2015/04/08 Python
python并发编程之线程实例解析
2017/12/27 Python
Ubuntu下使用Python实现游戏制作中的切分图片功能
2018/03/30 Python
Python迭代器与生成器用法实例分析
2018/07/09 Python
Python实现自定义读写分离代码实例
2019/11/16 Python
tensorflow图像裁剪进行数据增强操作
2020/06/30 Python
Python3爬虫中Splash的知识总结
2020/07/10 Python
Python模块zipfile原理及使用方法详解
2020/08/04 Python
基于CSS3的animation属性实现微信拍一拍动画效果
2020/06/22 HTML / CSS
HTML5应用之文件上传
2016/12/30 HTML / CSS
Html5 FileReader实现即时上传图片功能实例代码
2014/09/01 HTML / CSS
英国网上香水店:Fragrance Direct
2016/07/20 全球购物
潘多拉意大利官方网上商城:网上选购PANDORA珠宝
2018/10/07 全球购物
介绍下Java的输入输出流
2014/01/22 面试题
高中毕业生的个人自我评价
2014/02/21 职场文书
商务日语专业的自荐信
2014/05/23 职场文书
安全生产宣传标语
2014/06/06 职场文书
社会工作专业自荐信
2014/09/26 职场文书
2015国庆节66周年演讲稿
2015/03/20 职场文书