JavaScript设计模式笔记(二)策略模式

javascript 常见设计模式 JavaScript 中常见的设计模式帮助开发者解决代码组织、复用和扩展的问题。:确保一个类仅有一个实例,并提供一个全局访问点。在JavaScript中,这通常通过创建一个对象并在需要时返回这个对象的引用来实现。:定义一个创建对象的接口,但让子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类中进行。在JavaScript中,这通常通过函数实现,该函数根据传入的参数返回不同类型的对象。:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 阅读详情

策略模式的定义为:

定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换

                                                                                                    -------------------------------《JavaScript设计模式与开发实践》

即是说,当一个对象要完成某件事,该对象有多个完成该事的方法,我们把这些方法都封装起来,该对象知道的只有在哪个情况下要使用其中的哪个方法,而并不知道该方法的具体实现。

在策略模式中,我们需要有一方明确怎么实现各种方法,还要有一方判断要调用哪一个方法,我们将前者称作策略方,将后者称为调用方,假如现在我们有这样的需求,要给一个公司里面的员工发工资,员工分为a,b,c三个等级,每个等级的员工的工资不一样,现在我们要查询某个员工的工资。

let strategies = { // 策略方
    a: () => {
        return 10000
    },
    b: () => {
        return 8000
    },
    c: () => {
        return 5000
    }
}

var calculateSalary = (name, rank) => { // 调用方
    console.log(`${name}的工资是${strategies[rank]()}`)
}

calculateSalary('jack', 'a') // jack的工资是10000
calculateSalary('Mary', 'b') // Mary的工资是8000

策略方定下三种查工资的方式,然后在调用方调用其中的某一种方式,这就是策略模式。

策略模式的优点

1.减少了许多条件选择语句,直接使用属性来选择其中一种方式,这样的方式看起来也更加直观

2.将策略方/方法的实现和调用方/调用方法的选择很好地分开,当我们要修改其中一种方式时,只需修改策略方上的方法即可,调用方不用做任何修改,扩展方面也很方便,假如上面的需求中,突然多了一个职位“s”,工资不同于上面几种,这个时候我们只要在策略方中添加一个方法即可

let strategies = { // 策略方
    a: () => {
        return 10000
    },
    b: () => {
        return 8000
    },
    c: () => {
        return 5000
    },
    s: () => {
        return 12000
    }
}

3.策略方的方法可以在多个地方重复调用,减少了代码多次重复的复制粘贴

 

策略模式的缺点

1.污染命名空间

如上的代码中在全局中定义了一个全局的对象用于表示策略方,这样的做法会使得该名字占用了一个变量名,如果在后面某个部分不小心使用了该变量名,那毫无疑问会引起许多报错

2.增加在作用域中的类或对象

使用策略模式,我们要完成一个事情,必须至少增添一个类或对象,这样可能会在代码中创建过多的类,我们可以通过在全局中将所要用到的类/对象作为属性放在一个对象中,这样会尽可能地减少对象的创建

3.违反最少知识原则

虽然计算方面的内容会由策略方来完成,但是选择的任务还是落在调用方上,因此调用方必须对策略方的方法有一定的了解,而这个是违反了最少知识原则


参考自曾探的《JavaScript设计模式与开发实践》

planning模块(6)-参考线的平滑(二次规划) 上一篇已经介绍了采样点生成锚点数据的过程,并且将所有采样点生成的锚点数据设置到了平滑器中.接下来继续介绍使用二次规划平滑参考线的算法过程.从锚点数据中提取坐标存入raw_point2d,提取横向边界存入anchorpoints_lateralbound,将起点和终点的横向边界设置为0,防止车在起点和终点位置偏离车道中心线. 阅读详情

相关推荐

Ubuntu 24.04 安装 ROS2 Jazzy

手把手教你在Ubuntu24.04上安装JazzyROS2操作系统。

weixin_74185504的博客 1万+

雇员管理系统_java_控制台

/** * @author 菊丿外人 * 功能:员工管理系统 */ import java.util.*; //雇员管理类 class EmpMange{ private ArrayList al = null; public EmpMange(){ al=new ArrayList(); } //加入员工 public void addEmp(Emp emp){ al.

css 1373

ADS8681数据手册没讲透的细节:SPI时序、量程切换与电压换算的避坑指南

本文深入解析ADS8681数据手册未提及的SPI时序优化、量程切换陷阱与电压校准技巧。针对树莓派5与ADS8681的SPI通信问题,提供CPOL/CPHA配置建议;详解量程切换的位操作玄机与寄存器配置流程;并提出三步校准法应对非理想供电环境,帮助开发者提升ADC测量精度。

weixin_29178069的博客 520

【行为型设计模式】策略模式、观察者模式,命令模式、模板方法

本文转载自实验楼课程: 策略模式 现在模拟一个简单的功能:如果是管理员用户,以管理员方式显示某页面,如果不是,那么一普通用户显示页面 使用策略模式之前: class Question(object): """ 问题对象,没有使用策略模式之前的作法 """ def __init__(self, admin=True): self._admin = a...

yangqin@1225的博客 286

基于h5端的视频录制和回溯功能的实现

整理了一套《前端大厂面试宝典》,包含了HTML、CSS、JavaScript、HTTP、TCP协议、浏览器、VUE、React、数据结构和算法,一共201道面试题,并对每个问题作出了回答和解析。

发果叁 3191

浅谈武术擂台格斗机器人大赛

武术擂台机器人赛是工科类专业的一个跨学科的竞赛项目,它涵盖了机械结构、硬件电路和计算机程序等技术领域。笔者在校期间有幸参加过四次这样的比赛,有成功也有失败,对此深有感悟。本文仅为个人观点,有说得不对的地方,望积极指出,希望能帮助到有需要的人。

weixin_43811044的博客 1万+

javascript设计模式(二)-策略模式(读书笔记)

最近在研读曾探大佬的著作《JavaScript设计模式与开发实践》——策略模式,并做了如下读书笔记总结和个人理解。 策略模式 定义:定义一系列的算法,把它们封装起来,并且使其可以相互替换。 使用策略模式计算奖金 var calculateBonus = function( performanceLevel, salary ){ if ( performanceLevel === 'S' ){ return salary * 4; } if ( performanceLeve.

weixin_43275787的博客 302

Open3D——直通滤波(python详细过程版)【2025最新版】

python就一个字:强。博客长期更新,本文最近更新时间为:2025年1月11日。

点云侠的博客 7516

深入理解JavaScript设计模式之策略模式

本文我以幽默+实践的方式学习策略模式,通过计算年终奖,表单校验,柯里化策略模式方法校验深入学习总结策略模式,反复学,反复看!

前端开发工程师 1935

3.1 5分钟搞定!Claude Code接入国产大模型完整教程(附代码)

摘要 本文提供了一份5分钟快速为Claude Code接入国产大模型的完整教程。首先介绍了系统环境要求(Windows/macOS/Linux、Node.js 18+、Python 3.8+),然后详细说明了三种安装Claude Code的方式(npm/yarn/pnpm)。重点讲解了两种国产大模型接入方案:通义千问(推荐)和文心一言,包括获取API密钥、安装SDK、创建MCP服务器、配置Claude Code等步骤。文中提供了详细的代码示例和配置文件模板,确保开发者能快速完成国产大模型的接入,降低使用成本

yonggeit的博客 7925

谷歌A2A协议入门指南:附简易Python代码示例

继"关税"之后,当下最热门的词汇当属AI智能体——这种基于人工智能的软件能够执行复杂任务、实现工作流自动化并提升生产效率。但迄今为止,大多数智能体都处于各自为政的状态,难以顺畅协作。就像团队执行重大项目时,成员之间却无法交流!对于技术人员而言,一个可能遇到的典型场景是:假设你需要协调四个不同的AI服务——处理用户查询的Gemini智能体、在向量数据库进行搜索的AI应用、基于Claude的摘要生成器,以及运行专业领域逻辑的Python智能体。

独立开发,substack顶级编辑 799

js设计模式之策略模式

深入学习实际开发设计思想,提升代码质量

SK_study的博客 7249

某城商银行生产容器云平台详细设计方案分享及经验总结

AS3模式的CIS容器部署在K8S集群内,作为F5的控制器,CIS容器通过对K8S集群内Configmap资源进行监控,将Configmap资源中的内容转化为F5的配置,将配置推送给 F5 ,CIS容器还通过K8S标准的API接口完成业务发现和实时监听集群内Pod的变化,一旦Pod发生变化,相应的更新会及时推送给F5,并完成更新。容器技术发展非常迅速,现在应用大多以容器作为承载介质,前两年在容器云上承载的应用类型主要是Web类,随着容器云领域的不断发展,越来越多的应用类型将迁移至容器云,包括有状态应用。

qq_61890005的博客 856

JavaScript 设计模式——策略模式

是一种行为设计模式,能让我们定义一系列算法,并将每种算法分别放入独立的类中,以使算法的对象能够相互替换。

Starry_Firmament的博客 2414

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

从表单校验看JavaScript策略模式的使用

众所周知的是,表单确实在前端,唔,或者说在网页中占有不小的比重。事实上,几乎每一个中大型网站都会有“登录注册”以验证用户信息、防止一些不可名状的隐患。。。 那么表单的优劣就成了前端开发者急需解决的问题。其实我更愿意称为“代码的可读性”或“可复用性”以及“是否冗杂”。 表单也有“优劣”?你在开玩笑嘛? 我想你可以认真看下下面的代码,它用到了一些“新知识”: <form action="xxx" id="registerForm"> 请输入用户名:<input type="text" nam

flying meng的菜鸟居 6188

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

JavaScript设计模式(四)——策略模式、代理模式、观察者模式

本文我们介绍了策略模式、代理模式和观察者模式,快来一睹为快吧...

HuoZhiyan 的博客 1758

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

【Javascript】设计模式之策略模式

策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。

zhenshu_guo的博客 1539

JavaScript设计模式之策略模式

在程序设计中,我们也常常遇到类似的情况,要实现某一个功能有多种方案可以选择。比如一个压缩文件的程序,既可以选择zip算法,也可以选择gzip算法。 这些算法灵活多样,而且可以随意互相替换。这种解决方案就是将要介绍的策略模式。 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。 使用策略模式计算奖金 策略模式有着广泛的应用。这里我们就以年终奖的计算为例进行介绍。 很多...

wuyufa1994的博客 2194

【设计模式】【前端】 JavaScript 如何实现策略模式

策略模式可以优化代码,让代码更清晰、更易扩展。在前端开发中,很多人会用。

qq_59344127的博客 1309

JavaScript 设计模式之策略模式

什么是策略模式? 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。 使用策略模式计算奖金 很多公司的年终奖是根据员工的工资基数和年底绩效情况来发放的。例 如,绩效为S的人年终奖有4倍工资,绩效为A的人年终奖有3倍工资, 而绩效为B的人年终奖是2倍工资。假设财务部要求我们提供一段代码, 来方便他们计算员工的年终奖。 不使用策略模式 我们可以编写一个名为calcula...

仇益阳的博客 2万+

js设计模式——策略模式

定义:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。目的:将算法的使用和算法的实现分离开来。

梦是太匆 1413

JavaScript设计模式系列—模式篇(二)策略模式

转载请注明预见才能遇见的博客:http://my.youkuaiyun.com/ 原文地址:https://blog.youkuaiyun.com/pcaxb/article/details/100516461 JavaScript设计模式系列—模式篇(二)策略模式 目录 JavaScript设计模式系列—模式篇(二)策略模式 1.1 使用策略模式计算奖金 1. 最初的代码实现 2. 使用组合函数重构代码 ...

pcaxb的专栏 265

浅析JavaScript设计模式——策略模式

策略模式 定义一系列算法,把它们一个个封装起来,并且使它们可以相互替换 在我们的生活中,想要达到一种目的可以有不同的方法 所谓“条条大路通罗马” 在我们的程序中,想要实现一种目的的方法也可能不同 所以就引入了我们的策略模式 举一个

尐轩web前端网络日志 1487

JavaScript设计模式 -- 策略模式

JavaScript设计模式 -- 策略模式一. 概念二. 简单例子1. 使用组合函数重构代码2. JavaScript版本的策略模式三. 策略模式在JavaScript中的应用 作者: DocWhite白先生 一. 概念 策略模式,通俗易懂,就是字面意思,无论是生活还是编程,在实现一个目的的时候通常会有很多策略能达成目的,而策略模式存在的意义在于可以随意切换某种策略但依然保证能达到期望的目的。也...

白先生的博客 340

javascript设计模式二:策略模式

策略模式指定义一系列算法,将它们一个个封装起来。将不变的部分与变化的部分隔开是每个设计模式的主题,策略模式同样如此, 策略模式的基础组成: 一个基于策略模式的程序至少要由两部分组成。第一个部分是一组策略类,策略类封装了具体的算法,并负责具体的计算过程。第二个部分是环境类Context,Context接收。 客户的请求,随后把请求委托给某一个策略类(发送消息给某个策略对象),要做到这点,说明Cont...

一期一会的博客 1439

JavaScript设计模式:二、策略模式

JavaScript设计模式:二、策略模式 文章目录JavaScript设计模式:二、策略模式一、概念二、实现方式三、例子不使用策略模式模拟传统面向对象策略模式(原型实现)JavaScript字面量对象实现ES6类实现 一、概念 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换。 策略模式指的是定义一系列的算法,把它们一个个封装起来。将不变的部分和变化的部分隔开是每个设计模式的主题,策略模式也不例外,策略模式的目的就是将算法的使用与算法的实现分离开来。 一个基于策略模式的程序

SpringWaterLikeMe 612
上一篇: JavaScript设计模式笔记(一)单例模式
下一篇: JavaScript设计模式笔记(三)代理模式
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值