JS设计模式之策略模式概念与用法分析


Posted in Javascript onFebruary 05, 2018

本文实例讲述了JS设计模式之策略模式概念与用法。分享给大家供大家参考,具体如下:

策略模式的概念引用:

在软件开发中也常常遇到类似的情况,实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能。

如查找、排序等,一种常用的方法是硬编码(Hard Coding)在一个类中,如需要提供多种查找算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的查找算法;当然也可以将这些查找算法封装在一个统一的方法中,通过if…else…或者case等条件判断语句来进行选择。

这两种实现方法我们都可以称之为硬编码,如果需要增加一种新的查找算法,需要修改封装算法类的源代码;更换查找算法,也需要修改客户端调用代码。

在这个算法类中封装了大量查找算法,该类代码将较复杂,维护较为困难。如果我们将这些策略包含在客户端,这种做法更不可取,将导致客户端程序庞大而且难以维护,如果存在大量可供选择的算法时问题将变得更加严重.

举例说明:

一、出行旅游:我们可以有几个策略可以考虑:可以骑自行车,汽车,做火车,飞机。每个策略都可以得到相同的结果,但是它们使用了不同的资源。

选择策略的依据是费用,时间,使用工具还有每种方式的方便程度 。

二、在一个购物商城,在五一做了一个活动,所以图书类商品根据购买的金额做出以下折扣策略

1、购买满199元,打9折
2、购买满399元,打8折
3、购买满599元以上,打7折;

function BookStrategy() {
 this.calcPrice = function( price ) {
 console.log("未打折 = " + price);
 }
}
function BookCalc9Strategy() {
 this.calcPrice = function( price ) {
 console.log("原价是:"+ price +";打9折后:" + (price * 0.9));
 }
}
function BookCalc8Strategy() {
 this.calcPrice = function( price ) {
 console.log("原价是:"+ price +";打8折后:" + (price * 0.8));
 }
}
function BookCalc7Strategy() {
 this.calcPrice = function( price ) {
 console.log("原价是:"+ price +";打7折后:" + (price * 0.7));
 }
}
function PriceCalc( _strategy ) {
 this.strategy = _strategy;
 this.getPrice = function( price ) {
 return this.strategy.calcPrice( price );
 }
}
function Client() {
 var price = 100;
 var priceCalc = null;
 if ( 199 <= price && price < 399 ) {
 priceCalc = new PriceCalc(new BookCalc9Strategy());
 } else if ( 399 <= price && price < 599 ) {
 priceCalc = new PriceCalc(new BookCalc8Strategy());
 } else if ( 599 <= price ) {
 priceCalc = new PriceCalc(new BookCalc7Strategy());
 } else {
 priceCalc = new PriceCalc(new BookStrategy());
 }
 priceCalc.getPrice(price);
}
Client();

运行结果:

JS设计模式之策略模式概念与用法分析

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

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

Javascript 相关文章推荐
javascript学习(一)构建自己的JS库
Jan 02 Javascript
js控制input输入字符解析
Dec 27 Javascript
js实现防止被iframe的方法
Jul 03 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
Jul 10 Javascript
JS弹出新窗口被拦截的解决方法
Aug 09 Javascript
JS实现预加载视频音频/视频获取截图(返回canvas截图)
Oct 09 Javascript
用vue写一个仿简书的轮播图的示例代码
Mar 13 Javascript
浅谈webpack性能榨汁机(打包速度优化)
Jan 09 Javascript
在Vue中用canvas实现二维码和图片合成海报的方法
Jun 10 Javascript
微信小程序自定义组件components(代码详解)
Oct 21 Javascript
vue-iview动态新增和删除的方法
Jun 17 Javascript
echarts柱状图背景重叠组合而非并列的实现代码
Dec 10 Javascript
Node.js成为Web应用开发最佳选择的原因
Feb 05 #Javascript
Node.js上传文件功能之服务端如何获取文件上传进度
Feb 05 #Javascript
javascript实现最长公共子序列实例代码
Feb 05 #Javascript
JS设计模式之访问者模式定义与用法分析
Feb 05 #Javascript
基于vue 动态加载图片src的解决方法
Feb 05 #Javascript
vue2.0 datepicker使用方法
Feb 04 #Javascript
js数组常用最重要的方法
Feb 04 #Javascript
You might like
Laravel 5 框架入门(二)构建 Pages 的管理功能
2015/04/09 PHP
PHP实现适用于自定义的验证码类
2016/06/15 PHP
php使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
php使用pthreads v3多线程实现抓取新浪新闻信息操作示例
2020/02/21 PHP
jquery Firefox3.5中操作select的问题
2009/07/10 Javascript
JavaScript中获取未知对象属性的代码
2011/04/27 Javascript
简单实例处理url特殊符号&amp;处理(2种方法)
2013/04/02 Javascript
详解刷新页面vuex数据不消失和不跳转页面的解决
2018/01/30 Javascript
vuex实现登录状态的存储,未登录状态不允许浏览的方法
2018/03/09 Javascript
解决vue中使用swiper插件问题及swiper在vue中的用法
2018/04/04 Javascript
vue使用jsonp抓取qq音乐数据的方法
2018/06/21 Javascript
详解vue2.0 资源文件assets和static的区别
2018/11/27 Javascript
jquery层次选择器的介绍
2019/01/18 jQuery
微信小程序 this.triggerEvent()的具体使用
2019/12/10 Javascript
如何使用webpack打包一个库library的方法步骤
2019/12/18 Javascript
研究Python的ORM框架中的SQLAlchemy库的映射关系
2015/04/25 Python
Python实现比较两个文件夹中代码变化的方法
2015/07/10 Python
Python装饰器原理与简单用法实例分析
2018/04/29 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
对python 中class与变量的使用方法详解
2019/06/26 Python
Python绘制堆叠柱状图的实例
2019/07/09 Python
对django后台admin下拉框进行过滤的实例
2019/07/26 Python
python自动分箱,计算woe,iv的实例代码
2019/11/22 Python
pycharm 更改创建文件默认路径的操作
2020/02/15 Python
基于selenium及python实现下拉选项定位select
2020/07/22 Python
python 爬取英雄联盟皮肤并下载的示例
2020/12/04 Python
香港连卡佛百货官网:Lane Crawford
2019/09/04 全球购物
俄罗斯鲜花递送:AMF
2020/04/24 全球购物
《狼和小羊》教学反思
2014/04/20 职场文书
2014优秀大学生简历自我评价
2014/09/15 职场文书
2014最新版群众路线四风整改措施
2014/09/24 职场文书
单位实习鉴定评语
2015/01/04 职场文书
地心历险记观后感
2015/06/15 职场文书
小学一年级数学教学反思
2016/02/16 职场文书
初三数学教学反思
2016/02/17 职场文书
Python趣味挑战之教你用pygame画进度条
2021/05/31 Python