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中substring()方法的使用
Jun 06 Javascript
jQuery点击改变class并toggle及toggleClass()方法定义用法
Dec 11 Javascript
Boostrap入门准备之border box
May 09 Javascript
JavaScript事件学习小结(三)js事件对象
Jun 09 Javascript
手动初始化Angular的模块与控制器
Dec 26 Javascript
详解微信小程序入门五: wxml文件引用、模版、生命周期
Jan 20 Javascript
JS控件bootstrap datepicker使用方法详解
Mar 25 Javascript
整理关于Bootstrap导航的慕课笔记
Mar 29 Javascript
JavaScript中一些特殊的字符运算
Aug 17 Javascript
zTree jQuery 树插件的使用(实例讲解)
Sep 25 jQuery
react以create-react-app为基础创建项目
Mar 14 Javascript
React中的render何时执行过程
Apr 13 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函数解决SQL injection
2006/10/09 PHP
提取HTML标签
2006/10/09 PHP
php全局变量和类配合使用深刻理解
2013/06/05 PHP
jQuery 图像裁剪插件Jcrop的简单使用
2009/05/22 Javascript
node.js开发中使用Node Supervisor实现监测文件修改并自动重启应用
2014/11/04 Javascript
js+HTML5基于过滤器从摄像头中捕获视频的方法
2015/06/16 Javascript
jQuery原型属性和原型方法详解
2015/07/07 Javascript
js实现创建删除html元素小结
2015/09/30 Javascript
JS使用正则表达式除去字符串中重复字符的方法
2015/11/05 Javascript
jQuery图片切换动画特效
2016/11/02 Javascript
JavaScript继承的特性与实践应用深入详解
2018/12/30 Javascript
深入理解JS异步编程-Promise
2019/06/03 Javascript
JS中==、===你分清楚了吗
2020/03/04 Javascript
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
python3抓取中文网页的方法
2015/07/28 Python
python 读取目录下csv文件并绘制曲线v111的方法
2018/07/06 Python
Django实现web端tailf日志文件功能及实例详解
2019/07/28 Python
通过python连接Linux命令行代码实例
2020/02/18 Python
python梯度下降算法的实现
2020/02/24 Python
Tensorflow tf.nn.atrous_conv2d如何实现空洞卷积的
2020/04/20 Python
浅谈Python中的模块
2020/06/10 Python
Python实现爬取并分析电商评论
2020/06/19 Python
html5使用Drag事件编辑器拖拽上传图片的示例代码
2017/08/22 HTML / CSS
即时搜索数百万张门票:SeatsForEveryone.com
2018/08/26 全球购物
新西兰最大的连锁超市:Countdown
2020/06/04 全球购物
Sony C++笔试题
2013/03/10 面试题
名词解释型面试题(主要是网络)
2013/12/27 面试题
幼儿教师思想汇报
2014/01/10 职场文书
2014年公司迎新年活动方案
2014/02/24 职场文书
《小动物过冬》教学反思
2014/04/17 职场文书
护士上岗前培训自我鉴定
2014/04/20 职场文书
新文化运动的口号
2014/06/21 职场文书
2014年电话客服工作总结
2014/12/09 职场文书
综合测评自我评价
2015/03/06 职场文书
2016大学生社会实践心得体会范文
2016/01/14 职场文书
Java实现贪吃蛇游戏的示例代码
2022/09/23 Java/Android