文档章节

策略模式与开发实践

unibigbear
 unibigbear
发布于 2016/05/10 10:00
字数 601
阅读 20
收藏 0

策略模式

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

       在应用中,策略模式可以用来优化具有很多不同判读分支的场景。

       我们先来看一个例子,根据不同的绩效成绩来算年终奖。(说到奖金我就开心,哈哈)

简单的多条件判断

我们根据不同的绩效来发奖金:

这样的代码有一个问题,就是当情况越来越多,就得修改calculateBonus函数内部,这就违反了开放-封闭原则。

使用策略模式重构

       前面说到过,策略模式是定义一系列的算法,把它们一个个封装起来。其目的就是将算法的使用与算法的实现分离开来。

       在上面的例子中,算法的使用的不变的,就是根据某个算法得到计算后的奖金,而算法的实现是根据条件变化的。

一个简单的策略模式就完成了。

使用策略模式验证表单

      前面只是一个小例子,目的是介绍策略模式这样思想。现在以工程应用中的表单验证为例,说说策略模式的作用。

普通的验证

       最常见的验证方式:

 如此为每一个条件都进行一次判断,势必会带来很多的复制粘贴。

策略模式的验证

下来看看我们如何通过使用策略模式来重构表单验证:

这样的解决方案可能看起来代码量会多一些,而且比较复杂,但是维护和拓展起来就比较方便了,而且复用性也会比较强。这也就达到了策略模式的作用。

感悟 

       总体来说,策略模式可以有效避免多重条件选择语句,从而避免许多重复的复制粘贴工作。

 

欢迎大家一起交流。

扫描以下二维码,获取更多更精美文章!

关注我们微信订阅号( uniguytech100) 与服务号(uniguytech),获取更多更精美文章!

也欢迎加入【大家技术网讨论QQ群】,群号码:256175955,请备注你个人的介绍!让我们一起聊聊it的那些事!

© 著作权归作者所有

共有 人打赏支持
unibigbear
粉丝 1
博文 70
码字总数 5874
作品 0
闵行
JavaScript 中常见设计模式整理

开发中,我们或多或少地接触了设计模式,但是很多时候不知道自己使用了哪种设计模式或者说该使用何种设计模式。本文意在梳理常见设计模式的特点,从而对它们有比较清晰的认知。 JavaScript 中...

牧云云
05/18
0
0
JavaScript设计模式之观察者模式

前言 准备研究一下MVVM的一些东西,由于MVVM运用了观察者模式的思想,因此翻开了《JavaScript设计模式与开发实践》一书,将观察者模式学习了一遍,顺便有对一些常用的设计模式进行一些了解,...

Srtian
05/22
0
0
设计模式之禅(第2版).epub

【下载地址】 本书是设计模式领域公认的3本经典著作之一,“极具趣味,容易理解,但讲解又极为严谨和透彻”是本书的写作风格和方法的最大特点。第1版2010年出版,畅销至今,广受好评,是该领...

winter730
05/16
0
0
php各种设计模式简单实践思考

前言 我一直觉得什么框架,版本,甚至语言对于一个coder来说真的不算什么,掌握一个特别高大上的一个框架或者是一个新的,少众的语言真的不算什么,因为你可以,我要花时间也可以,大家都是这...

michaelgbw
2016/06/13
0
0
代理模式(Proxy Pattern):动态代理 - 最易懂的设计模式解析

前言 今天我来全面总结开发中最常用的设计模式 - 代理模式中的动态代理模式 其他设计模式介绍 1分钟全面了解“设计模式” 单例模式(Singleton) - 最易懂的设计模式解析 简单工厂模式(Sim...

Carson_Ho
04/09
0
0

没有更多内容

加载失败,请刷新页面

加载更多

你为什么在Redis里读到了本应过期的数据

一个事故的故事 晚上睡的正香突然被电话吵醒,对面是开发焦急的声音:我们的程序在访问redis的时候读到了本应过期的key导致整个业务逻辑出了问题,需要马上解决。 看到这里你可能会想:这是不...

IT--小哥
今天
2
0
祝大家节日快乐,阖家幸福! centos GnuTLS 漏洞

yum update -y gnutls 修复了GnuTLS 漏洞。更新到最新 gnutls.x86_64 0:2.12.23-22.el6 版本

yizhichao
昨天
5
0
Scrapy 1.5.0之选择器

构造选择器 Scrapy选择器是通过文本(Text)或 TextResponse 对象构造的 Selector 类的实例。 它根据输入类型自动选择最佳的解析规则(XML vs HTML): >>> from scrapy.selector import Sele...

Eappo_Geng
昨天
4
0
Windows下Git多账号配置,同一电脑多个ssh-key的管理

Windows下Git多账号配置,同一电脑多个ssh-key的管理   这一篇文章是对上一篇文章《Git-TortoiseGit完整配置流程》的拓展,所以需要对上一篇文章有所了解,当然直接往下看也可以,其中也有...

morpheusWB
昨天
5
0
中秋快乐!!!

HiBlock
昨天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部