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 相关文章推荐
zShowBox 图片放大展示jquery版 兼容性
Sep 24 Javascript
jQuery LigerUI 使用教程表格篇(1)
Jan 18 Javascript
Jquery Ajax方法传值到action的方法
May 11 Javascript
js实现微信分享代码
Oct 11 Javascript
javascript获取select标签选中的值
Jun 04 Javascript
基于BootStrap实现局部刷新分页实例代码
Aug 08 Javascript
Bootstrap 模态框实例插件案例分析
Dec 28 Javascript
使用JavaScript实现alert的实例代码
Jul 06 Javascript
详解webpack引入第三方库的方式以及注意事项
Jan 15 Javascript
原生JS检测CSS3动画是否结束的方法详解
Jan 27 Javascript
vant-ui AddressEdit地址编辑和van-area的用法说明
Nov 03 Javascript
VUE异步更新DOM - 用$nextTick解决DOM视图的问题
Nov 06 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
3种平台下安装php4经验点滴
2006/10/09 PHP
Discuz Uchome ajaxpost小技巧
2011/01/04 PHP
php缩小png图片不损失透明色的解决方法
2013/12/25 PHP
php switch语句多个值匹配同一代码块的实现
2014/03/03 PHP
php采用curl访问域名返回405 method not allowed提示的解决方法
2014/06/26 PHP
php实现无限级分类
2014/12/24 PHP
PHP 返回13位时间戳的实现代码
2016/05/13 PHP
JavaScript DOM学习第八章 表单错误提示
2010/02/19 Javascript
防止按钮在短时间内被多次点击的方法
2014/03/10 Javascript
php和js对数据库图片进行等比缩放示例
2014/04/28 Javascript
JS动态加载当前时间的方法
2015/02/09 Javascript
Bootstrap精简教程
2015/11/27 Javascript
jQuery 常用代码集锦(必看篇)
2016/05/16 Javascript
EasyUI布局 高度自适应
2016/06/04 Javascript
jQuery实现的无限级下拉菜单功能示例
2016/09/12 Javascript
详解jQuery中的事件
2016/12/14 Javascript
原生js实现瀑布流布局
2017/03/08 Javascript
nginx+vue.js实现前后端分离的示例代码
2018/02/12 Javascript
简化版的vue-router实现思路详解
2018/10/19 Javascript
Python冲顶大会 快来答题!
2018/01/17 Python
python pandas写入excel文件的方法示例
2019/06/25 Python
python简单实现矩阵的乘,加,转置和逆运算示例
2019/07/10 Python
Python字符串大小写转换拼接删除空白
2019/09/19 Python
Pytorch 实现sobel算子的卷积操作详解
2020/01/10 Python
django 实现手动存储文件到model的FileField
2020/03/30 Python
Kathmandu英国网站:新西兰户外运动品牌
2017/03/27 全球购物
Linux中如何设置Java环境变量(Ubuntu)
2016/07/24 面试题
董事长助理岗位职责
2014/02/18 职场文书
入党推优材料
2014/06/02 职场文书
旅游专业毕业生自荐书
2014/06/30 职场文书
企业百日安全活动总结
2015/05/07 职场文书
2019年员工旷工保证书!
2019/06/28 职场文书
68句权威创业名言
2019/08/26 职场文书
Golang 对es的操作实例
2022/04/20 Golang
win10系统xps文件怎么打开?win10打开xps文件的两种操作方法
2022/07/23 数码科技
css中:last-child不生效的解决方法
2022/08/05 HTML / CSS