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 相关文章推荐
js获取select标签选中值的两种方式
Jan 09 Javascript
jQuery实现网站添加高亮突出显示效果的方法
Jun 26 Javascript
jQuery实现的网页右下角tab样式在线客服效果代码
Oct 23 Javascript
JS提示:Uncaught SyntaxError:Unexpected token ) 错误的解决方法
Aug 19 Javascript
JS简单实现浮动窗口效果示例
Sep 07 Javascript
Bootstrap3多级下拉菜单
Feb 24 Javascript
Angular 4环境准备与Angular cli创建项目详解
May 27 Javascript
详解Node.js中的Async和Await函数
Feb 22 Javascript
jQuery中常用动画效果函数知识点整理
Aug 19 jQuery
vue项目刷新当前页面的三种方法
Dec 04 Javascript
Vue中的transition封装组件的实现方法
Aug 13 Javascript
在antd Table中插入可编辑的单元格实例
Oct 28 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函数学习之PHP函数点评
2012/07/05 PHP
多个Laravel项目如何共用migrations详解
2018/09/25 PHP
js 加载并解析XML字符串的代码
2009/12/13 Javascript
javascript 基础篇2 数据类型,语句,函数
2012/03/14 Javascript
在jQuery中 关于json空对象筛选替换
2013/04/15 Javascript
解析Javascript中难以理解的11个问题
2013/12/09 Javascript
浅谈jQuery中对象遍历.eq().first().last().slice()方法
2014/11/26 Javascript
浅谈angularJS 作用域
2015/07/05 Javascript
js密码强度检测
2016/01/07 Javascript
JavaScript程序开发之JS代码放置的位置
2016/01/15 Javascript
js改变css样式的三种方法推荐
2016/06/28 Javascript
vue2.0组件之间传值、通信的多种方式(干货)
2018/02/10 Javascript
微信小程序发布新版本时自动提示用户更新的方法
2019/06/07 Javascript
vue导航栏部分的动态渲染实例
2019/11/01 Javascript
[03:11]完美世界DOTA2联赛PWL DAY8集锦
2020/11/09 DOTA
python操作MySQL数据库的方法分享
2012/05/29 Python
Python random模块常用方法
2014/11/03 Python
Python的批量远程管理和部署工具Fabric用法实例
2015/01/23 Python
Python实现读取json文件到excel表
2017/11/18 Python
详解如何利用Cython为Python代码加速
2018/01/27 Python
解决python nohup linux 后台运行输出的问题
2018/05/11 Python
Python简易版图书管理系统
2019/08/12 Python
Python列表list常用内建函数实例小结
2019/10/22 Python
python:删除离群值操作(每一行为一类数据)
2020/06/08 Python
用python实现学生管理系统
2020/07/24 Python
基于python实现操作git过程代码解析
2020/07/27 Python
Pycharm无法打开双击没反应的问题及解决方案
2020/08/17 Python
python 基于opencv去除图片阴影
2021/01/26 Python
DOUGLAS波兰:在线销售香水和化妆品
2020/07/05 全球购物
运动会致辞稿50字
2014/02/04 职场文书
公司总经理工作职责管理办法
2014/02/28 职场文书
交通事故赔偿协议书范本
2014/04/15 职场文书
2015年政教主任工作总结
2015/07/23 职场文书
安全生产培训心得体会
2016/01/18 职场文书
sql查询结果列拼接成逗号分隔的字符串方法
2021/05/25 SQL Server
浅谈css清除浮动(clearfix和clear)的用法
2023/05/21 HTML / CSS