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 相关文章推荐
将string解析为json的几种方式小结
Nov 11 Javascript
jQuery表单验证插件formValidator(改进版)
Feb 03 Javascript
Javascript 颜色渐变效果的实现代码
Oct 01 Javascript
js生成随机数之random函数随机示例
Dec 20 Javascript
前端必备神器 Snap.svg 弹动效果
Nov 10 Javascript
JavaScript中的异常捕捉介绍
Dec 31 Javascript
jquery插件锦集【推荐】
Dec 16 Javascript
阿里大于短信验证码node koa2的实现代码(最新)
Sep 07 Javascript
vue.js 使用axios实现下载功能的示例
Mar 05 Javascript
解决vue this.$forceUpdate() 处理页面刷新问题(v-for循环值刷新等)
Jul 26 Javascript
layui 弹出删除确认界面的实例
Sep 06 Javascript
创建nuxt.js项目流程图解
Mar 13 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
PHP学习笔记之字符串编码的转换和判断
2014/05/22 PHP
php实现mysql事务处理的方法
2014/12/25 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
PHP实现微信提现(企业付款到零钱)
2019/08/01 PHP
php异常处理捕获错误整理
2019/09/23 PHP
js常用代码段整理
2011/11/30 Javascript
禁用键盘上的(全局)指定键兼容iE、Chrome、火狐
2013/05/14 Javascript
JavaScript字符串对象slice方法入门实例(用于字符串截取)
2014/10/16 Javascript
jQuery中:contains选择器用法实例
2014/12/30 Javascript
第五篇Bootstrap 排版
2016/06/21 Javascript
CSS3 media queries结合jQuery实现响应式导航
2016/09/30 Javascript
JavaScript基于对象去除数组重复项的方法
2016/10/09 Javascript
nodejs实现发出蜂鸣声音(系统报警声)的方法
2017/01/18 NodeJs
bootstrap多层模态框滚动条消失的问题
2017/07/21 Javascript
laydate时间日历插件使用方法详解
2018/11/14 Javascript
vue+ESLint 配置保存 自动格式化代码
2020/03/17 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
[02:22]完美世界DOTA2联赛PWL S3 集锦第一期
2020/12/15 DOTA
python异常触发及自定义异常类解析
2019/08/06 Python
Win10下安装并使用tensorflow-gpu1.8.0+python3.6全过程分析(显卡MX250+CUDA9.0+cudnn)
2020/02/17 Python
基于Keras中Conv1D和Conv2D的区别说明
2020/06/19 Python
Nuts.com:优质散装,批发坚果、干果和巧克力等
2017/03/21 全球购物
澳洲女装时尚在线:Blue Bungalow
2018/05/05 全球购物
世界领先的豪华床上用品供应商之一:Bedeck Home
2019/03/18 全球购物
乌克兰电子产品和家用电器购物网站:TOUCH
2019/08/09 全球购物
俄罗斯在线手表和珠宝商店:AllTime
2019/09/28 全球购物
打架检讨书800字
2014/01/10 职场文书
感恩教育月活动总结
2014/07/07 职场文书
学习礼仪心得体会
2014/09/01 职场文书
新教师个人总结
2015/02/06 职场文书
佛光寺导游词
2015/02/10 职场文书
董事长助理工作总结2015
2015/07/23 职场文书
2019交通安全宣传标语集锦!
2019/06/28 职场文书
Springboot如何使用logback实现多环境配置?
2021/06/16 Java/Android
简单介绍Python的第三方库yaml
2021/06/18 Python
Python OpenCV实现图形检测示例详解
2022/04/08 Python