位置: 编程技术 - 正文

详解JavaScript的策略模式编程(javascript详细介绍)

编辑:rootadmin

推荐整理分享详解JavaScript的策略模式编程(javascript详细介绍),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:javascript的概念,javascript的用法,javascript的理解,javascript的用法,javascript的概念,细说javascript,细说javascript,细说javascript,内容如对您有帮助,希望把文章链接给更多的朋友!

我喜欢策略设计模式。我尽可能多的试着去使用它。究其本质,策略模式使用委托去解耦使用它们的算法类。

这样做有几个好处。他可以防止使用大条件语句来决定哪些算法用于特定类型的对象。将关注点分离开来,因此降低了客户端的复杂度,同时还可以促进子类化的组成。它提高了模块化和可测性。每一个算法都可以单独测试。每一个客户端都可以模拟算法。任意的客户端都能使用任何算法。他们可以互调。就像乐高积木一样。

为了实现策略模式,通常有两个参与者:

该策略的对象,封装了算法。

客户端(上下文)对象,以即插即用的方式能使用任何策略。

这里介绍了我在Javascrip里,怎样使用策略模式,在混乱无序的环境中怎样使用它将库拆成小插件,以及即插即用包的。

函数作为策略

一个函数提供了一种封装算法的绝佳方式,同时可以作为一种策略来使用。只需通过一个到客户端的函数并确保你的客户端能调用该策略。

我们用一个例子来证明。假设我们想创建一个Greeter 类。它所要做的就是和人打招呼。我们希望Greeter 类能知道跟人打招呼的不同方式。为了实现这一想法,我们为打招呼创建不同的策略。

在上面的例子中,Greeter 是客户端,并有三种策略。正如你所看到的,Greeter 知道怎样使用算法,但对于算法的细节却一无所知。

对于复杂的算法,一个简单的函数往往不能满足。在这种情况下,对好的方式就是按照对象来定义。 类作为策略

详解JavaScript的策略模式编程(javascript详细介绍)

策略同样可以是类,特别是当算比上述例子中使用的人为的(策略/算法)更复杂的时候。使用类的话,允许你为每一种策略定义一个接口。

在下面的例子中,证实了这一点。

通过使用类,我们与anexecutemethod对象定义了一个策略。客户端可以使用任何策略实现该接口。

同样注意我又是怎样创建GreetingStrategy的。有趣的部分是对methodexecute的重载。它以其他函数的形式定义。现在类的后继子类可以改变特定的行为,如thesayHiorsayByemethod,并不改变常规的算法。这种模式叫做模板方法,非常适合策略模式。

让我们看个究竟。

GreetingStrategy 通过指定theexecutemethod的步骤,创建了一个类的算法。在上面的代码片段中,我们通过创建专门的算法从而利用了这一点。

没有使用子类,我们的Greeter 依然展示出一种多态行为。没有必要在Greeter 的不同类型上进行切换来触发正确的算法。这一切都绑定到每一个Greeter 对象上。

多环境下的策略模式

我最喜欢的有关策略模式的例子之一,实在 Passport.js库中。Passport.js提供了一种在Node中处理身份验证的简单方式。大范围内的供应商都支持(Facebook, Twitter, Google等等),每一个都作为一种策略实现。

该库作为一个npm包是可行的,其所有的策略也一样。库的用户可以决定为他们特有的用例安装哪一个npm包。下面是展示其如何实现的代码片段:

Passport.js库只配备了一两个简单的身份验证机制。除此之外,它没有超过一个符合上下文对象的一个策略类的接口。这种机制让他的使用者,很容易的实现他们自己的身份验证机制,而对项目不产生不利的影响。 反思

策略模式为你的代码提供了一种增加模块化和可测性的方式。这并不意味着(策略模式)总是有效。Mixins 同样可以被用来进行功能性注入,如在运行时的一个对象的算法。扁平的老式 duck-typing多态有时候也可以足够简单。

然而,使用策略模式允许你在一开始没有引入大型体系的情况下,随着负载型的增长,扩大你的代码的规模。正如我们在Passport.js例子中看到的一样,对于维护人员在将来增加另外的策略,将变得更加方便。

介绍JavaScript的一个微型模版 我一直在使用一个小工具,并发现它在构建Javascript应用过程中非常实用。它是一个非常简单的模板函数,速度快,支持缓存,并容易使用。我想分享一

浅谈关于JavaScript API设计的一些建议和准则 设计是一个很普遍的概念,一般是可以理解为为即将做的某件事先形成一个计划或框架。(牛津英语词典)中,设计是一种将艺术,体系,硬件或者更多的

详解JavaScript中的客户端消息框架设计原理 哇——是个危险的题目,对吗?我们对于什么是本质的理解当然会随着我们对要解决问题的理解而变化。因此我不会说谎——一年前我所理解的本质很

标签: javascript详细介绍

本文链接地址:https://www.jiuchutong.com/biancheng/380457.html 转载请保留说明!

上一篇:对JavaScript客户端应用编程的一些建议(javascript在客户端执行)

下一篇:介绍JavaScript的一个微型模版(javascript简介和语法)

  • 金税盘抵减增值税的账务处理
  • 折旧年限与税法有关吗
  • 小规模拍卖公司差额征税
  • 免征增值税的项目如何开发票
  • 税务登记管理办法2023
  • 错账更正方法有哪几种
  • 核定征收一般纳什么税
  • 企业购房产的进项税税额
  • 劳务公司包工包料的法律法规
  • 开具红字发票的当月就要进项税额转出吗
  • 冲红发票怎么写备注
  • 无形资产摊销为什么计入管理费
  • 冲减多计提的附加费
  • 中兴通技术维护费
  • 汇兑损益属于企业成本吗
  • 小规模纳税人标准2019
  • 资产负债表的编制方法和步骤
  • 商品流通企业成本核算的内容包括
  • 多付银行承兑退回的会计分录怎么写?
  • 劳务派遣案例分析题
  • 增值税专用发票几个点
  • 个体户需要缴纳残疾人保障金吗
  • 质量扣款不开票怎么处理
  • 专项应付款需要偿还吗
  • 处置的固定资产
  • 批发led电子屏
  • 其他应付款和其他应交款区别
  • ntfs磁盘压缩
  • Win10 20H2 KB5001391补丁包更新内容汇总
  • 入账价值是啥
  • 其他综合收益属于什么类
  • linux服务器nfs安装
  • 缴纳增值税会计处理
  • 诉讼费属于什么科目类别
  • php现在
  • 小企业取得存货入账价值的依据是
  • 企业清缴汇算
  • 离职赔偿金计入什么费用
  • 完美解决在ThinkPHP控制器中命名空间的问题
  • 科目余额表和资产负债表的金额不一致的原因
  • 【Zabbix实战之部署篇】Zabbix客户端的安装部署方法
  • 深度学习之bottleneck layer
  • 库存商品盘亏计入哪个科目
  • 企业购进固定资产,在安装完工交付使用时
  • 什么是免抵调库税额
  • 研发费用税前加计扣除金额怎么算
  • 一般纳税人普票可以抵扣吗
  • 认证发票可以分两次进行吗
  • 利息调整摊销额计入投资收益吗
  • 织梦cms怎么样
  • sql server如何进行安全设置
  • 合伙企业可以列入法人吗
  • 独立核算和非独立核算怎么查
  • 购买空调报销单怎么填
  • 购买产品样品计入什么科目
  • 税金附加科目有哪些
  • 未开票收入怎么做账
  • 工资代扣工会会费协议
  • 收到红字发票如何处理
  • 小规模一直零申报有什么影响
  • 营业外支出有哪些费用
  • mysql启动错误1067 进程意外终止
  • 禁止Windows 打游戏怎么办
  • ubuntu里怎么装软件
  • mac系统不能升级怎么办
  • windows7 无线服务
  • cocos2dx官方教程
  • js原型继承和构造继承
  • sed删除文件中的目录
  • nodejs例子
  • shell脚本对比两个文件夹内的内容
  • 深入理解中国式现代化
  • 浙江省国税公务员工资
  • 如何参与发票摇奖
  • 内蒙古税务稽查局
  • 汽车销售流程有哪些环节?每个环节的主要内容是什么?
  • 建筑施工劳务资质
  • 个人医保缴费证明怎么打印
  • 公司以融资租赁形式从事非法放贷业务,,能否让法院判
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设