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表数据排序 sort table data
Feb 18 Javascript
jQuery-serialize()输出序列化form表单值的方法
Dec 26 Javascript
Javascript学习笔记之 对象篇(一) : 对象的使用和属性
Jun 24 Javascript
Node.js实用代码段之正确拼接Buffer
Mar 17 Javascript
AngularJS基础 ng-keydown 指令简单示例
Aug 02 Javascript
jQuery中值得注意的trigger方法浅析
Dec 12 Javascript
详解vue-cli构建项目反向代理配置
Sep 07 Javascript
微信小程序使用wxParse解析html的方法教程
Jul 06 Javascript
微信小程序的线程架构【推荐】
May 14 Javascript
使用ThinkJs搭建微信中控服务的实现方法
Aug 08 Javascript
javascript设计模式 ? 解释器模式原理与用法实例分析
Apr 17 Javascript
在vs code 中如何创建一个自己的 Vue 模板代码
Nov 10 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
smarty高级特性之过滤器的使用方法
2015/12/25 PHP
WordPress中限制非管理员用户在文章后只能评论一次
2015/12/31 PHP
一个js写的日历(代码部分网摘)
2009/09/20 Javascript
JQuery浮动DIV提示信息并自动隐藏的代码
2010/08/29 Javascript
Javascript 加载和执行-性能提高篇
2012/12/28 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
Sortable.js拖拽排序使用方法解析
2016/11/04 Javascript
jQuery手指滑动轮播效果
2016/12/22 Javascript
使用jquery给新生的th绑定hover事件的实例
2017/02/10 Javascript
jQuery 循环遍历改变a标签的href(实例讲解)
2017/07/12 jQuery
用js屏蔽被http劫持的浮动广告实现方法
2017/08/10 Javascript
vue项目打包为APP,静态资源正常显示,但API请求不到数据的操作
2020/09/12 Javascript
[07:55]2014DOTA2 TI正赛第三日 VG上演推进荣耀DKEG告别
2014/07/21 DOTA
[10:54]Team Spirit vs Navi
2018/06/07 DOTA
Python打造出适合自己的定制化Eclipse IDE
2016/03/02 Python
windows下pycharm安装、创建文件、配置默认模板
2018/07/31 Python
简单谈谈python基本数据类型
2018/09/26 Python
对Python中list的倒序索引和切片实例讲解
2018/11/15 Python
python实现简单flappy bird
2018/12/24 Python
用python建立两个Y轴的XY曲线图方法
2019/07/08 Python
python实现点击按钮修改数据的方法
2019/07/17 Python
Django实现简单网页弹出警告代码
2019/11/15 Python
python解析命令行参数的三种方法详解
2019/11/29 Python
python接口自动化如何封装获取常量的类
2019/12/24 Python
Pytorch实现将模型的所有参数的梯度清0
2020/06/24 Python
Django+Uwsgi+Nginx如何实现生产环境部署
2020/07/31 Python
css3实现wifi信号逐渐增强效果实例
2017/08/09 HTML / CSS
如何利用cmp命令比较文件
2013/09/23 面试题
法律七进实施方案
2014/03/15 职场文书
股权投资意向书
2014/04/01 职场文书
初中家长寄语
2014/04/02 职场文书
竞争上岗演讲稿范文
2014/05/12 职场文书
2014年度安全生产目标管理责任书
2014/07/25 职场文书
四风问题自查自纠工作情况报告
2014/10/28 职场文书
新员工考核评语
2014/12/31 职场文书
导游词之舟山普陀山
2019/11/06 职场文书