本文实例讲述了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();
运行结果:
更多关于JavaScript相关内容可查看本站专题:《javascript面向对象入门教程》、《JavaScript切换特效与技巧总结》、《JavaScript查找算法技巧总结》、《JavaScript错误与调试技巧总结》、《JavaScript数据结构与算法技巧总结》、《JavaScript遍历算法与技巧总结》及《JavaScript数学运算用法总结》
希望本文所述对大家JavaScript程序设计有所帮助。
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
更新日志
- 杨泰瑞《City Boy》[320K/MP3][28.71MB]
- 胡彦斌《失业情歌》首版[WAV+CUE]
- 杨泰瑞《City Boy》[FLAC/分轨][159.66MB]
- APM亚流新世代《一起冒险》[320K/MP3][68.66MB]
- FIM《天伦乐》(DaydreamsAndLullabies)24K金碟[WAV+CUE]
- 【雨果唱片】中国管弦乐《鹿回头》
- 【雨果唱片】中国管弦乐《鹿回头》WAV
- APM亚流新世代《一起冒险》[FLAC/分轨][106.77MB]
- 崔健《飞狗》律冻文化[WAV+CUE][1.1G]
- 罗志祥《舞状元 (Explicit)》[320K/MP3][66.77MB]
- 尤雅.1997-幽雅精粹2CD【南方】【WAV+CUE】
- 张惠妹.2007-STAR(引进版)【EMI百代】【WAV+CUE】
- 群星.2008-LOVE情歌集VOL.8【正东】【WAV+CUE】
- 罗志祥《舞状元 (Explicit)》[FLAC/分轨][360.76MB]
- Tank《我不伟大,至少我能改变我。》[320K/MP3][160.41MB]