JS设计模式(2)策略模式
什么是策略模式?
定义:根据不同参数可以命中不同的策略
主要解决:在有多种算法相似的情况下,使用 if...else 所带来的复杂和难以维护。
何时使用:有许多种情况,而区分它们的只是他们直接的行为。
如何解决:通过一个hash对象,来映射不同的策略。
优点: 1、算法可以自由切换。 2、避免使用多重条件判断。 3、扩展性、复用性良好。
缺点: 1、策略类会增多。 2、所有策略类都需要对外暴露。
使用场景: 1.需要动态地根据行为改变运行方法。2.为了减少代码,同时为了让代码具有更好的可读性。3.需要对策略进行统一管理。
JavaScript中的策略模式
观察如下获取年终奖的 demo,根据不同的参数(level)获得不同策略方法(规则),这是策略模式在 JS 比较经典的运用之一。
const strategy = {'S': function(salary) {return salary * 4},'A': function(salary) {return salary * 3},'B': function(salary) {return salary * 2}
}const calculateBonus = function(level, salary) {return strategy[level](salary)
}calculateBonus('A', 10000) // 30000
在函数是一等公民的 JS 中,策略模式的使用常常隐藏在高阶函数中,稍微变换下上述 demo 的形式如下,可以发现我们平时已经在使用它了,恭喜我们又掌握了一种设计模式。
const S = function(salary) {return salary * 4
}const A = function(salary) {return salary * 3
}const B = function(salary) {return salary * 2
}const calculateBonus = function(func, salary) {return func(salary)
}calculateBonus(A, 10000) // 30000
更多专业前端知识,请上 【猿2048】www.mk2048.com
JS设计模式(2)策略模式相关推荐
- JS设计模式(策略模式)
策略模式 概念 不同策略分开处理 避免出现大量if-else 或者 switch-case (JS 中未找到经典应用场景) 演示 青铜写法: 王者写法:(摆脱很多的if-else写法) 设计原则验证 ...
- JavaScript设计模式之策略模式(学习笔记)
在网上搜索"为什么MVC不是一种设计模式呢?"其中有解答:MVC其实是三个经典设计模式的演变:观察者模式(Observer).策略模式(Strategy).组合模式(Composi ...
- Java设计模式之策略模式与状态模式
一.策略模式定义 定义:策略模式定义了一系列的算法,并将每一个算法封装起来,而且使他们之间可以相互替换,策略模式可以在不影响客户端的情况下发生变化. 好了,定义看看就完了,我知道你很烦看定义. 二.策 ...
- 换个姿势学设计模式:策略模式
点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 来源:公众号「闻人的技术博客」 前言 前段时间,接到一个 ...
- 研磨设计模式之 策略模式--转
http://www.uml.org.cn/sjms/201009092.asp 研磨设计模式之 策略模式 2010-09-09 作者:云飞龙行 来源:云飞龙行的blog 先感谢众多朋友的支持 ...
- 设计模式:策略模式(Strategy)
定 义:它定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化, 不会影响到使用算法的客户. 示例:商场收银系统,实现正常收费.满300返100.打8折.......等不同收费 ...
- C++设计模式之策略模式(Strategy)
Strategy策略模式 作用:定义了算法家族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户. UML图: 代码实现 #include <iostream& ...
- python策略模式包含角色_详解Python设计模式之策略模式
虽然设计模式与语言无关,但这并不意味着每一个模式都能在每一门语言中使用.<设计模式:可复用面向对象软件的基础>一书中有 23 个模式,其中有 16 个在动态语言中"不见了,或者简 ...
- 一篇博客读懂设计模式之-----策略模式
设计模式之策略模式 在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的对象 定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换. 主要解决:在有多种算法相似的情况下 ...
- 面向对象设计模式之策略模式
面向对象设计模式之策略模式 1.策略模式定义了算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户 2.抽象鸭子类,鸭子飞行行为在此处类似于算法族 1 package ...
最新文章
- boost::math模块使用逆高斯(或逆正态)分布的示例
- 【数据结构与算法】之深入解析“比特位计数”的求解思路与算法示例
- 任务 进程 线程区别
- 使用SpringMVC 的MultipartFile文件上传时参数获取的一个坑
- python 时间差模块_python利用datetime模块计算时间差
- 拼接字符串(带参程序)
- Spring集成redis(Spring Data Redis)
- 作者:杨婧(1983-),女,博士,中国科学院计算技术研究所工程师。
- rocketmq存储消息mysql_消息中间件—RocketMQ消息存储(一)
- intellij idea 主题下载网站
- 龙芯pmon快速启动方法
- 苹果电脑安装windows系统 失败后 磁盘空间丢失
- xfs文件系统修复问题
- 授权计算机软件著作权,计算机软件著作权查询方式有哪些? 软件著作权授权...
- linux数据库哪个难,11 月数据库排名公布:前三难撼动
- 实现动画切换渐进渐出效果
- okhttp3发送https请求
- SpringBoot——@ConfigurationProperties注解
- 三国杀开源系列之一104@365
- matlab中sparse和full函数的使用
热门文章
- linux 域账户密码忘记,linux基础命令-用户域用户组管理
- 天津市电子计算机职业学院,天津市电子计算机职业中等专业学校
- java哈希_Java如何采用哈希码实现分类(以员工分配为例)
- 无载波幅度和相位调制(CAP)与QAM调制的详细解析(可见光通信应用场景),以及CAP matlab程序下载链接
- c语言ue,小话C语言中的cotinue和break
- python自动化工具哪个好用_10款好用的自动化测试工具推荐
- 如何获取当前刀具号_数控刀具的选用原则,如何使用数控刀具?一文全面介绍数控刀具...
- ubuntu16.04安装MATLAB R2017b步骤详解(附完整破解文件包)
- element table 组件内容换行方案
- android UI