当前位置:首页 > javascript技术文章 > JS设计模式之策略模式概念与用法分析

JS策略模式概念与实例用法

  • 发布时间:
  • 作者:码农之家原创
  • 点击:147

这篇文章主要知识点是关于JS、设计模式、策略模式、的内容,如果大家想对相关知识点有系统深入的学习,可以参阅以下电子书

你不知道的JavaScript 下卷
  • 类型:JavaScript大小:7 MB格式:PDF作者:凯尔
立即下载

JS设计模式之策略模式概念与用法分析

本文实例讲述了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程序设计有所帮助。

以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。

推荐内容

webpack4.x下babel的安装、配置及使用的知识点总结

JavaScript按概率随机生成代码整理

PHP中加速、缓存扩展的区别及用法整理

PHP的Yii框架中移除组件所绑定的例子分享

软件自动化测试成功之道:典型工具、脚本开发、测试框架

展开 +

收起 -

javascript 相关电子书
学习笔记
网友NO.745485

JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能

本文实例讲述了JS基于设计模式中的单例模式(Singleton)实现封装对数据增删改查功能。分享给大家供大家参考,具体如下: 单例模式 单例模式的核心结构中只包含一个被称为单例的特殊类。通过单例模式可以保证系统中一个类只有一个实例 单例模式最初的定义出现于《设计模式》(艾迪生维斯理, 1994):“保证一个类仅有一个实例,并提供一个访问它的全局访问点。” 单例模式定义:“ 一个类有且仅有一个实例,并且自行实例化向整个系统提供。 ” var Singleton = (function(){ SingletonClass() { } var singleton = null; return { getInstance: function() { if (singleton == null) { singleton = new singletonClass(); } else { return singleton; } } }})();Singleton.getIntance(); 前端经常用到一些和接口相关的增删改查异步操作。我们来举例,我在操作数据列表时,常常少不了,增加 修改 删除功能。有的……

网友NO.251652

剖析Node.js异步编程中的回调与代码设计模式

NodeJS 最大的卖点——事件机制和异步 IO,对开发者并不是透明的。开发者需要按异步方式编写代码才用得上这个卖点,而这一点也遭到了一些 NodeJS 反对者的抨击。但不管怎样,异步编程确实是 NodeJS 最大的特点,没有掌握异步编程就不能说是真正学会了 NodeJS。本章将介绍与异步编程相关的各种知识。 在代码中,异步编程的直接体现就是回调。异步编程依托于回调来实现,但不能说使用了回调后程序就异步化了。我们首先可以看看以下代码。 function heavyCompute(n, callback) { var count = 0, i, j; for (i = n; i 0; --i) { for (j = n; j 0; --j) { count += 1; } } callback(count);}heavyCompute(10000, function (count) { console.log(count);});console.log('hello'); 100000000hello 可以看到,以上代码中的回调函数仍然先于后续代码执行。JS 本身是单线程运行的,不可能在一段代码还未结束运行时去运行别的代码……

网友NO.514745

JS设计模式之单例模式(一)

命名空间 单例模式是JavaScript中最常见的一种模式,通过这种模式可以为我们提供一个命名空间,例如jQuery库的命名空间为jQuery或$。命名空间的使用是为了让代码更加整洁,在多人协作开发的情况下,不同的人定义的变量很有可能重复,此时就需要使用命名空间来约束每个人定义的变量,使相同名称的变量放在不同的命名空间中,避免相互干扰。例如: // A程序员的命名空间var A = { get: function(id){ return document.getElementById(id); } css: function(id,key,value){ get(id).style[key] = value; }}// B程序员的命名空间var B = { get: function(className){ return document.getElementByClassName(className)[0]; } css: function(className,key,value){ get(className).style[key] = value; }} A、B两个命名空间中都有一个get方法和一个css方法,用于元素获取和元素样式修改,不同的是A是通过id来获取元素,而B是通过class来获取元素,……

网友NO.849160

js设计模式之代理模式及订阅发布模式实例详解

本文实例讲述了js设计模式之代理模式及订阅发布模式。分享给大家供大家参考,具体如下: 为啥将两种模式放在一起呢?因为这样文章比较长啊。 写博客的目的我觉得首要目的是整理自己的知识点,进而优化个人所得知识体系。知识成为个人的知识,就在于能够用自己的话表达同一种意义。 本文是设计模式系列文章的第二篇文章,第一篇:。 1,代理模式 ,只是学习了虚拟代理以及缓存代理,具体案例 1)虚拟代理 //业务代码var myImage = (function() { var imgNode = document.createElement("img"); document.body.appendChild(imgNode); return { setSrc: function(src) { console.log(1111); imgNode.src = src; } }})();// 设计模式代码var ProxyImage = (function() { var img = new Image(); //这个img只是用来判断图片是否加载完成,加载完成之后修改图片链接 img.onload = function() { console.log(this); myImage.setSrc(this.src); }; r……

<
1
>

电子书 编程教程 文档 软件 源码 视频

Copyright 2018-2020 xz577.com 码农之家

本站所有电子书资源不再提供下载地址,只分享来路

免责声明:网站所有作品均由会员网上搜集共同更新,仅供读者预览及学习交流使用,下载后请24小时内删除

版权投诉 / 书籍推广 / 赞助:QQ:520161757