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实现自己的DOM选择器原理及代码
Mar 04 Javascript
JSON+JavaScript处理JSON的简单例子
Mar 20 Javascript
javascript 终止函数执行操作
Feb 14 Javascript
jQuery on方法传递参数示例
Dec 09 Javascript
javascript实现跨域的方法汇总
Jun 25 Javascript
Easyui form combobox省市区三级联动
Jan 13 Javascript
angular源码学习第一篇 setupModuleLoader方法
Oct 20 Javascript
Vue + Webpack + Vue-loader学习教程之相关配置篇
Mar 14 Javascript
Avalonjs双向数据绑定与监听的实例代码
Jun 23 Javascript
Vue 页面状态保持页面间数据传输的一种方法(推荐)
Nov 01 Javascript
Bootstrap 按钮样式与使用代码详解
Dec 09 Javascript
ES6小技巧之代替lodash
Jun 07 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默认安装产生系统漏洞
2006/10/09 PHP
php获取ip的三个属性区别介绍(HTTP_X_FORWARDED_FOR,HTTP_VIA,REMOTE_ADDR)
2012/09/23 PHP
深入php self与$this的详解
2013/06/08 PHP
Linux Apache PHP Oracle 安装配置(具体操作步骤)
2013/06/17 PHP
php 在windows下配置虚拟目录的方法介绍
2013/06/26 PHP
php设计模式之单例模式实例分析
2015/02/25 PHP
解决更换PHP5.4以上版本后Dedecms后台登录空白问题的方法
2015/10/23 PHP
thinkphp3.2.3版本的数据库增删改查实现代码
2016/09/22 PHP
XmlUtils JS操作XML工具类
2009/10/01 Javascript
实现51Map地图接口(示例代码)
2013/11/22 Javascript
鼠标悬浮显示二级菜单效果的jquery实现
2014/10/29 Javascript
浅谈JSON.parse()和JSON.stringify()
2015/07/14 Javascript
js实现可折叠展开的手风琴菜单效果
2015/09/07 Javascript
基于Javascript实现二级联动菜单效果
2016/03/04 Javascript
javascript特殊日历控件分享
2016/03/07 Javascript
最好用的Bootstrap fileinput.js文件上传组件
2016/12/12 Javascript
微信小程序 wx.uploadFile无法上传解决办法
2016/12/14 Javascript
Vue.js常用指令之循环使用v-for指令教程
2017/06/27 Javascript
JS开发中基本数据类型具体有哪几种
2017/10/19 Javascript
Vue监听事件实现计数点击依次增加的方法
2018/09/26 Javascript
vue通信方式EventBus的实现代码详解
2019/06/10 Javascript
layui table 获取分页 limit的方法
2019/09/20 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
python使用pil生成图片验证码的方法
2015/05/08 Python
详解Python中的序列化与反序列化的使用
2015/06/30 Python
python之从文件读取数据到list的实例讲解
2018/04/19 Python
深入了解python列表(LIST)
2020/06/08 Python
CSS3 实现图形下落动画效果
2020/11/13 HTML / CSS
HTML5拖拽文件到浏览器并实现文件上传下载功能代码
2013/06/06 HTML / CSS
Vuori官网:运动服装的终级表现
2021/01/27 全球购物
挂职思想汇报
2013/12/31 职场文书
2014年十一国庆向国旗敬礼寄语
2014/04/11 职场文书
超市七夕促销活动方案
2014/08/28 职场文书
2015年党员自评材料
2014/12/17 职场文书
学习弘扬焦裕禄精神心得体会
2016/01/23 职场文书
python的html标准库
2022/04/29 Python