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 相关文章推荐
一个可拖拽列宽表格实例演示
Nov 26 Javascript
jquery重新播放css动画所遇问题解决
Aug 21 Javascript
jQuery读取和设定KindEditor值的方法
Nov 22 Javascript
Jquery+asp.net后台数据传到前台js进行解析的方法
May 11 Javascript
JS建造者模式基本用法实例分析
Jun 30 Javascript
JavaScript实现斗地主游戏的思路
Feb 29 Javascript
jquery实现简单的banner轮播效果【实例】
Mar 30 Javascript
js实现加载更多功能实例
Oct 27 Javascript
js轮播图透明度切换(带上下页和底部圆点切换)
Apr 27 Javascript
js实现图片上传预览原理分析
Jul 13 Javascript
mint-ui在vue中的使用示例
Apr 05 Javascript
详解TypeScript中的类型保护
Apr 29 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 显示指定路径下的图片
2009/10/29 PHP
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
PHP使用DOMDocument类生成HTML实例(包含常见标签元素)
2014/06/25 PHP
php数组排序usort、uksort与sort函数用法
2014/11/17 PHP
smarty实现多级分类的方法
2014/12/05 PHP
PHP实现即时输出、实时输出内容方法
2015/05/27 PHP
解析 thinkphp 框架中的部分方法
2017/05/07 PHP
js获取提交的字符串的字节数
2009/02/09 Javascript
js改变img标签的src属性在IE下没反应的解决方法
2013/07/23 Javascript
js菜单点击显示或隐藏效果的简单实例
2014/01/13 Javascript
基于JavaScript判断浏览器到底是关闭还是刷新(超准确)
2016/02/01 Javascript
JS随机打乱数组的方法小结
2016/06/22 Javascript
JS触发服务器控件的单击事件(详解)
2016/08/06 Javascript
强大Vue.js组件浅析
2016/09/12 Javascript
深入理解Javascript箭头函数中的this
2017/02/13 Javascript
详解NODEJS基于FFMPEG视频推流测试
2017/11/17 NodeJs
JS实现简单的浮动碰撞效果示例
2017/12/28 Javascript
详解使用React.memo()来优化函数组件的性能
2019/03/19 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
JavaScript 常见的继承方式汇总
2020/09/17 Javascript
Vue实现boradcast和dispatch的示例
2020/11/13 Javascript
Python新手在作用域方面经常容易碰到的问题
2015/04/03 Python
python中黄金分割法实现方法
2015/05/06 Python
Python实现统计单词出现的个数
2015/05/28 Python
Python的Django框架中使用SQLAlchemy操作数据库的教程
2016/06/02 Python
简单实现python收发邮件功能
2018/01/05 Python
python 批量修改 labelImg 生成的xml文件的方法
2019/09/09 Python
python基于property()函数定义属性
2020/01/22 Python
opencv之颜色过滤只留下图片中的红色区域操作
2020/06/05 Python
Python爬虫headers处理及网络超时问题解决方案
2020/06/19 Python
美国帽子俱乐部商店:Hat Club
2019/07/05 全球购物
申请任职学生会干部自荐书范文
2014/02/13 职场文书
2014领导班子四风问题查摆思想汇报
2014/09/13 职场文书
课堂打架检讨书200字
2014/11/21 职场文书
2015年万圣节活动总结
2015/03/24 职场文书
初婚未育证明样本
2015/06/18 职场文书