首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

设计模式 - 策略模式 - JavaScript

引用请声明:xxoo521.com | 「公众号:心谭博客」 什么是策略模式策略模式定义:就是能够把一系列“可互换的”算法封装起来,并根据用户需求来选择其中一种。...策略模式的实现核心就是:将算法的使用和算法的实现分离。算法的实现交给策略类。算法的使用交给环境类,环境类会根据不同的情况选择合适的算法。...策略模式优缺点 在使用策略模式的时候,需要了解所有的“策略”(strategy)之间的异同点,才能选择合适的“策略”进行调用。...() # 使用策略B的算法 cxt.update_stragegy( StragegyB ) cxt.interface() javascript 实现 // 策略类 const strategies...A context("A"); // 调用策略B context("B"); 参考 策略模式-Python 四种实现方式 Python 设计模式 - 策略模式JavaScript 设计模式和开发实践

37010

JavaScript设计模式--策略模式

把不变的部分和变化的部分隔开是每个设计模式的主题。 条条大路通罗马。我们经常会遇到解决一件事情有多种方案,比如压缩文件,我们可以使用zip算法、也可以使用gzip算法。...其灵活多样,我们可以采用策略模式解决。 一、定义 定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。 基于策略模式的程序至少由两部分组成。...第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。第二个部分是环境类Context,Context接收客户的请求,随后把请求委托给某一个策略类。 二、示例 计算奖金。...); console.log(calculateBonus("A", 20000)); console.log(calculateBonus("B", 20000)); 三、延伸:表单验证 /* 校验策略对象...this.cache = []; }; /** * 添加要验证的策略 * @param dom 要验证的dom元素 * @param rules 验证规则 */

33451
您找到你想要的搜索结果了吗?
是的
没有找到

JavaScript 设计模式 —— 策略模式

很快,迎来了 JavaScript 设计模式系列的第二篇 —— 策略模式 ......什么是策略模式 策略模式定义: 定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换 策略模式一般由两部分组成: 封装不同策略策略组(使得代码复用性、可扩展、可维护性提高,避免大量 CV 代码的情况...,有的不支持多态的语言也一样要实现策略模式 策略处于程序设计层次,多态处于语言语法层次 总结 策略模式的优点 策略模式利用组合、委托和多态等技术和思想,可以有效避免多重且冗余的 IF-ELSE 策略模式提供了对开放...策略模式中的算法也可以复用在工程的其他地方,避免大量重复的 CV 工作 在策略模式中利用组合和委托来让 Context 拥有执行算法的能力,这也是继承的一种更轻便的替代方案 策略模式的缺点 策略模式会在程序中增加许多策略函数...设计模式系列往期文章 JavaScript 设计模式 —— 单例模式 如果觉得文章不错,欢迎五连 掘金:前端LeBron 知乎:前端LeBron

39310

JavaScript设计模式—-策略模式

声明:这个系列为阅读《JavaScript设计模式与开发实践》 —-曾探@著一书的读书笔记 1.策略模式的定义 将不变的部分和变化的部分隔开是每个设计模式的主题。...3.传统语言中的策略模式JavaScript中的策略模式对比 3.1.传统语言中的策略模式 使用策略模式来实现计算奖金 var performances = function () { };...3.2.JavaScript中的策略模式 //封装的策略算法 var strategies={ "S":function (salary) { return salary...4.策略模式实现的表单校验 4.1使用JavaScript来实现的一个支持多重校验规则表单校验 //策略对象 var strategies = { isNonEmpty: function (...所以在JavaScript中,“函数对象的多态性”会更加简单些。 总结: 在JavaScript语言的策略模式中,策略类往往被函数所代替,这时策略模式就成了一种“隐形”的模式

25920

JavaScript设计模式 策略模式

而这种情况,在设计模式中,称为策略模式策略模式的定义:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。 例子: 很多公司的年终奖是根据员工的工资基数和年底绩效情况来方法的。...在不使用策略模式的情况下,通常这样设计代码: var calculateBonus = function(performanceLevel,salary){ if(performanceLevel...使用策略模式重构代码。 策略模式的程序至少由两部分组成,第一部分是策略类,策略类封装了具体的算法,并负责具体的计算过程。...现在模仿传统面向对象语言中策略模式的实现: //定义策略类 var performanceS = function(){}; performanceS.prototype.calculate...最后,通过策略模式实现一个表单验证: define(function(){ var input_judge = { noNull:function(value,errorMsg

48320

JavaScript设计模式策略模式

在程序语言设计中,把这种设计模式叫做策略模式策略模式的定义:策略模式是指对一系列的算法定义,并将每一个算法封装起来,而且使它们还可以相互替换。...改用策略模式后的代码虽然代码量增加了,但更易于维护了。为什么更容易维护了呢?...当然上面是基于面向对象的方式使用的策略模式,大家都知道JavaScript没有类的概念,所以上面不是正在意义上的JavaScript语言策略模式。...在JavaScript中,函数是一等对象,可以将函数当作一个变量传递到函数内部执行,所以JavaScript语言是天生自带策略模式的哦!...下面看看真正的JavaScript语言策略模式: function getDay0(e){ console.log('今天是星期日:' + e); }; function

47351

javascript设计模式二:策略模式

策略模式指定义一系列算法,将它们一个个封装起来。将不变的部分与变化的部分隔开是每个设计模式的主题,策略模式同样如此, 策略模式的基础组成: 一个基于策略模式的程序至少要由两部分组成。...第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。第二个部分是环境类Context,Context接收。...客户的请求,随后把请求委托给某一个策略类(发送消息给某个策略对象),要做到这点,说明Context中要维持对某个策略对象的引用。 简易表单校验示例DEMO: <!...阻止表单提交 } } 这个DEMO还是存在bug的,比如重复点击提交按钮时会出现多次错误提示,这个应该可以通过将实例方法errShow改为类方法加闭包加单例模式来解决...通过上面DEMO学习,可以体会到策略模式的优越性,比如可以用在多重条件选择语句上,将条件分支算法封装到策略类中,使得它们易于切换、易于理解,还容易扩展。

38110

「设计模式 JavaScript 描述」策略模式

「设计模式 JavaScript 描述」策略模式 在现实中,很多时候也有多种途径到达同一个目的地。比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路。...这种解决方案就是本章将要介绍的「策略模式」。 ❝策略模式的定义是:「定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。」 ❞ 1. 使用策略模式计算奖金 策略模式有着广泛的应用。...但这段代码是基于传统面向对象语言的模仿,下一节我 们将了解用 JavaScript 实现的策略模式。 2....JavaScript 版本的策略模式 在前面,我们让 strategy 对象从各个策略类中创建而来,这是模拟一些传统面向对象语言的实现。...策略模式的优缺点 策略模式是一种常用且有效的设计模式,本文提供了计算奖金、、表单校验这两个例子来加深大家对策略模式的理解。从这两个例子中,我们可以总结出策略模式的一些优点。

46220

JavaScript设计模式策略模式

就是策略模式。在程序设计上表述为: 定义一系列的算法,把它们封装起来。并使之可以互换。 策略模式在程序设计上有极其广泛的应用,表述起来也是非常简单,但实现上就不一定没人做的很好了。以下就举例说明之。...其实回答的就是策略模式的问题。...同理,不用脱裤子的策略模式应该是更加轻松的。...且不论偏见,成熟的表单校验已经很好的运用了策略模式。狭义的策略模式是封装算法。事实上策略模式完全可以封装业务规则。只要这些业务规则指向的目标一致。...在JavaScript这种"函数作为一等对象"的语言中,策略模式是隐形的。策略类就是函数。我们可以用高喈函数来封装不同的行为。

44310

JavaScript设计模式与开发实践 - 策略模式

引言 本文摘自《JavaScript设计模式与开发实践》 在现实中,很多时候也有多种途径到达同一个目的地。比如我们要去某个地方旅游,可以根据具体的实际情况来选择出行的线路。...使用策略模式重构代码 下面使用策略模式来重构代码。策略模式指的是定义一系列的算法,把它们一个个封装起来。...将不变的部分和变化的部分隔开是每个设计模式的主题,策略模式也不例外,策略模式的目的就是将算法的使用与算法的实现分离开来。 在这个例子里,算法的使用方式是不变的,都是根据某个算法取得计算后的奖金数额。...一个基于策略模式的程序至少由两部分组成。第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。...在策略模式中利用组合和委托来让Context拥有执行算法的能力,这也是继承的一种更轻便的替代方案。 缺点 策略模式也有一些缺点,但这些缺点并不严重。

81380

JavaScript 设计模式系列」 策略模式与动态表单验证

策略模式 (Strategy Pattern)又称政策模式,其定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。封装的策略算法一般是独立的,策略模式根据输入来调整采用哪个算法。...策略模式的优缺点 策略模式将算法的实现和使用拆分,这个特点带来了很多优点: 策略之间相互独立,但策略可以自由切换,这个策略模式的特点给策略模式带来很多灵活性,也提高了策略的复用率; 如果不采用策略模式,...策略模式的适用场景 那么应该在什么场景下使用策略模式呢: 多个算法只在行为上稍有不同的场景,这时可以使用策略模式来动态选择算法; 算法需要自由切换的场景; 有时需要多重条件判断,那么可以使用策略模式来规避多重条件判断的情况...其他相关模式 7.1 策略模式和模板方法模式 策略模式和模板方法模式的作用比较类似,但是结构和实现方式有点不一样。...策略模式 让我们在程序运行的时候动态地指定要使用的算法; 模板方法模式 是在子类定义的时候就已经确定了使用的算法; 7.2 策略模式和享元模式 见享元模式中的介绍。

85720

JavaScript 设计模式系列 - 策略模式与动态表单验证

策略模式 (Strategy Pattern)又称政策模式,其定义一系列的算法,把它们一个个封装起来,并且使它们可以互相替换。封装的策略算法一般是独立的,策略模式根据输入来调整采用哪个算法。...策略模式的优缺点 策略模式将算法的实现和使用拆分,这个特点带来了很多优点: 策略之间相互独立,但策略可以自由切换,这个策略模式的特点给策略模式带来很多灵活性,也提高了策略的复用率; 如果不采用策略模式,...策略模式的适用场景 那么应该在什么场景下使用策略模式呢: 多个算法只在行为上稍有不同的场景,这时可以使用策略模式来动态选择算法; 算法需要自由切换的场景; 有时需要多重条件判断,那么可以使用策略模式来规避多重条件判断的情况...其他相关模式 7.1 策略模式和模板方法模式 策略模式和模板方法模式的作用比较类似,但是结构和实现方式有点不一样。...策略模式 让我们在程序运行的时候动态地指定要使用的算法; 模板方法模式 是在子类定义的时候就已经确定了使用的算法; 7.2 策略模式和享元模式 见享元模式中的介绍。

1.5K20

深入理解JavaScript系列(33):设计模式策略模式

策略模式定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化不会影响到使用算法的客户。...正文 在理解策略模式之前,我们先来一个例子,一般情况下,如果我们要做数据合法性验证,很多时候都是按照swith语句来判断,但是这就带来几个问题,首先如果增加需求的话,我们还要再次修改这段代码以增加逻辑,...} } } }; // 测试 alert(validator.validate("123", "isNonEmpty")); 复制代码 那如何来避免上述代码中的问题呢,根据策略模式...validator.validate(data); if (validator.hasErrors()) { console.log(validator.messages.join("\n")); } 复制代码 总结 策略模式定义了一系列算法...实践中,不仅可以封装算法,也可以用来封装几乎任何类型的规则,是要在分析过程中需要在不同时间应用不同的业务规则,就可以考虑是要策略模式来处理各种变化。

31230

JavaScript程序设计模式小技巧——策略模式,快看快用!!!

JavaScript程序设计模式小技巧——策略模式,快看快用!!! 何为策略模式? • 比如在业务逻辑或程序设计中比如要实现某个功能,有多种方案可供我们选择。...• 这些算法灵活多样,可随意切换,而这种解决方案就是我们所要学习的策略模式。 定义或概念 • 策略模式:定义一系列的算法,将他们一个个封装,并使他们可相互替换。...• 而在策略模式程序中:最少由两部分组成,一部分是一组策略类,在策略类中封装了具体的算法,并负责具体的计算过程。一部分是环境类 context,接受用户的请求,并将请求委托给某一个策略类。...,关键是如何从策略模式的实现背后,找到封装变化,委托和多态性这些思想的价值。...拥有很多在执行某些行为时有着不同的规则时 Tip: 文章部分内容参考于曾探大佬的《JavaScript 设计模式与开发实践》。文章仅做个人学习总结和知识汇总。

9310

设计模式策略模式_策略模式和状态模式

概述 在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。...在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的 context 对象。策略对象改变 context 对象的执行算法。...策略模式旨在解决不同逻辑下相同的对象执行不同策略的问题。...当我们遇到同一个方法,里面会根据需要多个逻辑的分支,分支里的行为都不同,但是都服务于同一个功能,这个时候就可以使用策略模式,将行为抽象为一个策略接口中的抽象方法,由接口的实现类——也就是策略类——去实现各中具体的行为...策略模式也是一种比较常见且好用的设计模式,线程池的拒绝策略就使用了策略模式

82820

策略模式

策略模式让算法独立于使用它的客户而变化。...——《设计模式:可复用面向对象软件的基础》 图示 策略模式结构图: 角色 策略模式有三个角色,分别是: 抽象策略角色(Strategy):是所有具体策略类共同的接口 具体策略角色(ConcreteStrategy...今天写策略模式时,忽然想到了这个。 渣男有一个葵花宝典,面对不同的女性,使用不同的套路,只为得到女人的心。面对拜金女,显示自己的有钱,买金卖银。面对爱才女,写诗写词。...在Spring中的策略模式: 依赖注入时,Spring IoC容器会应用策略模式选择使用哪种策略。 还有Spring IoC容器在运行时决定在开发环境使用H2数据源,在生产环境MySQL。...) 策略模式会产生很多策略类,多后期学习维护增加一定难度 总结 策略模式封装算法,提供给上下文选择使用,客户端无需关心算法具体逻辑,无需关系关系算法更替,但是使用前需要知道具体策略类。

31620
领券