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 相关文章推荐
js输出列表实现代码
Sep 12 Javascript
正则表达式中特殊符号及正则表达式的几种方法总结(replace,test,search)
Nov 26 Javascript
深入理解JavaScript高级之词法作用域和作用域链
Dec 10 Javascript
node.js中的console.warn方法使用说明
Dec 09 Javascript
jQuery实现的多屏图像图层切换效果实例
May 07 Javascript
Angular指令封装jQuery日期时间插件datetimepicker实现双向绑定示例
Jan 22 Javascript
Vue-Router实现页面正在加载特效方法示例
Feb 12 Javascript
详解vee-validate的使用个人小结
Jun 07 Javascript
Vue.directive()的用法和实例详解
Mar 04 Javascript
使用JavaScript中的lodash编写双色球效果
Jun 24 Javascript
如何在微信小程序中存setStorage
Dec 13 Javascript
JavaScript实现拖拽功能
Feb 11 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
国产动画《伍六七》原声大碟大卖,啊哈娱乐引领音乐赋能IP的新尝试
2020/03/08 国漫
php adodb连接不同数据库
2009/03/19 PHP
js闭包实例汇总
2014/11/09 Javascript
JavaScript中的操作符==与===介绍
2014/12/31 Javascript
基于JavaScript实现类似于百度学术高级检索功能
2016/03/02 Javascript
jQuery解决IE6、7、8不能使用 JSON.stringify 函数的问题
2016/05/31 Javascript
JavaScript正则表达式小结(test|match|search|replace|split|exec)
2016/12/08 Javascript
jQuery.form.js的使用详解
2017/06/14 jQuery
微信小程序CSS3动画下拉菜单效果
2018/11/04 Javascript
Vue 实现html中根据类型显示内容
2019/10/28 Javascript
用jQuery实现抽奖程序
2020/04/12 jQuery
javascript的hashCode函数实现代码小结
2020/08/11 Javascript
Vue proxyTable配置多个接口地址,解决跨域的问题
2020/09/11 Javascript
[01:22:28]DOTA2-DPC中国联赛 正赛 SAG vs RNG BO3 第一场 1月18日
2021/03/11 DOTA
python批量修改文件名的实现代码
2014/09/01 Python
Python3访问并下载网页内容的方法
2015/07/28 Python
Python中super()函数简介及用法分享
2016/07/11 Python
python 给DataFrame增加index行名和columns列名的实现方法
2018/06/08 Python
Python实用工具FuckIt.py介绍
2019/07/02 Python
Python 内置函数globals()和locals()对比详解
2019/12/23 Python
小白教你PyCharm从下载到安装再到科学使用PyCharm2020最新激活码
2020/09/25 Python
使用iframe+postMessage实现页面跨域通信的示例代码
2020/01/14 HTML / CSS
荷兰超市:DEEN
2018/03/14 全球购物
软件测试面试题
2014/01/05 面试题
后勤人员岗位职责
2013/12/17 职场文书
长辈证婚人证婚词
2014/01/09 职场文书
单位绩效考核方案
2014/05/11 职场文书
工程售后服务方案
2014/06/08 职场文书
房地产公司财务总监岗位职责
2015/04/03 职场文书
高中政治教师教学反思
2016/02/23 职场文书
授权协议书范本(3篇)
2019/10/15 职场文书
python中opencv实现图片文本倾斜校正
2021/06/11 Python
html输入两个数实现加减乘除功能
2021/07/01 HTML / CSS
JS数组去重详情
2021/11/07 Javascript
电脑关机速度很慢怎么办 提升电脑关机速度设置教程
2022/04/08 数码科技
GoFrame框架数据校验之校验结果Error接口对象
2022/06/21 Golang