写这篇文章的目的和上一篇单例模式一样,策略模式也是一种常用的设计模式,太多的if-else不仅看着不太美观而且不好维护,对于自己来说也等于复习了一遍策略模式。先说一下策略

模式的定义:

策略模式封装了算法家族,可以让彼此之间互相替换,简单的来说就是比如之前系统调用了两个数据源,现在要添加第三个数据源如果还是使用if-else就需要给所有调用数据源的地方加上

新的判断分支,从而导致维护繁琐。如以下代码:

if(A){
System.out.println("调用A数据源");
}else if(B){
System.out.println("调用B数据源");
}

如果将来随着业务变得复杂,加入C数据源,还要接着加入else if分支,以此类推工作量会越来越繁琐,而且加入了大量冗余代码。。。。

使用了策略模式之后:只需要在策略类Strategy中定义一个调用所有数据源的公共借口就可以

public abstract class Strategy {

public abstract void dataInterface();
}

DataStrategyA,封装了调用A数据源的方法,继承于Strategy

public class DataStrategyA extends Strategy {

    public void dataInterface() {
System.out.println("调用A数据源");
} }

DataStrategyB,封装了调用B数据源的方法,继承于Strategy

public class DataStrategyB extends Strategy {

    public void dataInterface() {
System.out.println("调用B数据源");
} }

Context算法调用类,根据具体策略对象调用相应的方法

public class Context {

    private Strategy strategy;

    public Context(Strategy strategy) {
this.strategy = strategy;
} public void contextInterface() {
strategy.dataInterface();
}
}

运行效果如下:

public class Test {

    public static void main(String[] args) {
Context context = new Context(new DataStrategyB());
context.contextInterface(); } }

这样就解决了繁琐的if-else操作了,就算以后加入C、D数据源也只需要增加两个策略类就可以了

此外,策略模式还有一个优点就是简化了单元测试,每个方法都有自己独立的类,可以通过自己的接口进行单独测试

当然策略模式也存在着缺点,就是增加了大量的策略类,要求每个开发人员都要了解。策略模式的优点、缺点都说完了怎么样取舍就看大家自己了。不过还是建议大家

使用策略模式。阿里巴巴的java开发手册中也明确表示了if层数超过三层的时候要使用策略模式,

有效的减少代码中太多的if、else?-策略模式的更多相关文章

  1. 论减少代码中return语句的骚操作

    一.写作背景 最近组内在推行checkstyle代码规范的检测,关于checkstyle的介绍可以参考:https://checkstyle.sourceforge.io, 在按照checkstyle ...

  2. 如何减少代码中的if-else嵌套

    实际项目中,往往有大量的if-else语句进行各种逻辑校验,参数校验等等,大量的if-else,语句使代码变得臃肿且不好维护,本篇文章结合我自己的经验,就减少if-else语句给出以下几种方案,分别适 ...

  3. FindBugs 入门——帮你减少代码中的bug数

    FindBugs 入门 FindBugs 作用 开发人员在开发了一部分代码后,可以使用FindBugs进行代码缺陷的检查.提高代码的质量,同时也可以减少测试人员给你报的bug数. 代码缺陷分类 根据缺 ...

  4. 在代码中设置IE9的默认文档模式

    要在旧系统中加一个jquery插件,本地demo测试没问题,部署到服务器后却报错.使用的是IE9浏览器,打开F12调试台,发现默认的文档模式是IE7,调成IE9后,报错消失.可以确认是该插件不兼容IE ...

  5. 如何在代码中减少if else语句的使用

    前言 代码中嵌套的if/else结构往往导致代码不美观,也不易于理解.面向过程的开发中代码有大量的if else,在java中可以用一些设计模式替换掉这些逻辑,那么在js中是否也有类似的方法用来尽可能 ...

  6. 理解javascript中的策略模式

    理解javascript中的策略模式 策略模式的定义是:定义一系列的算法,把它们一个个封装起来,并且使它们可以相互替换. 使用策略模式的优点如下: 优点:1. 策略模式利用组合,委托等技术和思想,有效 ...

  7. 使用策略模式重构switch case 代码

    目录 1.背景 2.案例 3.switch…case…方式实现 4.switch…case…带来的问题 5.使用策略模式重构switch…case…代码 6.总结 1.背景 之前在看<重构    ...

  8. 写代码的心得,怎么减少编程中的 bug?

    遭遇 bug 的时候,理性的程序员会说:这个 bug 能复现吗? 自负型:这不可能,在我这是好好的. 经验型:不应该,以前怎么没问题? 幻想型:可能是数据有问题. 无辜型:我好几个星期都没碰这块代码了 ...

  9. Java基础学习总结(81)——如何尽可能的减少Java代码中bug

    Java编程语言的人气自然无需质疑,从Web应用到Android应用,这款语言已经被广泛用于开发各类应用及代码中的复杂功能. 不过在编写代码时,bug永远是困扰每一位从业者的头号难题.在今天的文章中, ...

随机推荐

  1. SQlserver高效分页,还在使用row_number(),top之类的?

    row_number() ,还是top 这些分页的方法比较老了,效率不是很高效的, Sqlserve2012就有了,效率对比比较明显,尤其是数据比较大的情况下(我们可以观看查询执行计划) Offset ...

  2. Java基础(十五)异常(Exception)

    1.处理错误的要求 如果由于出现错误而使得某些操作没有完成,程序应该: 返回到一种安全状态,并能够让用户执行一些其他的命令. 允许用户保存所有操作的结果,并以妥善的方式终止程序. 2.程序中可能出现的 ...

  3. react框架安装和使用

    react 其实react跟vue差不多, 区别:vue-  双向数据绑定, react  单向数据绑定. 中文文档:https://react.docschina.org/ 第一步:安装方式,不能直 ...

  4. Python的深浅拷贝

    Python的深浅拷贝 深浅拷贝 1. 赋值,对于list, set, dict来说, 直接赋值. 其实是把内存地址交给变量并不是复制一份内容 list1 = [']] list2 = list1 p ...

  5. SpringCloud番外篇-服务治理之Nacos

    一.Nacos概述 Nacos是阿里巴巴开源的服务注册中心,官方文档:https://nacos.io/zh-cn/docs/what-is-nacos.html 从个人使用体验上看,nacos要比e ...

  6. 12 Zabbix4.4.0系统sendEmail邮件报警优化

    点击返回:自学Zabbix之路 点击返回:自学Zabbix4.0之路 点击返回:自学zabbix集锦 12 Zabbix4.4.0系统sendEmail邮件报警优化 接上一章节  Zabbix4.4. ...

  7. 转:linux环境mysql root用户密码重置

    经常设置了mysql的root密码,就忘记掉了,这种事还是经常发生的.转自他人(http://www.osyunwei.com/archives/2014.html),权做笔记.linux环境下,解决 ...

  8. csps51(a)

    T1的暴力死掉了...... T3大众分...... T2打了几个小表,发现了一些规律,成功yy出了$O(nlogalogn)$的暴力,拿到了73pts,弥补了爆炸的T1. T1. 考场上看了看,遥远 ...

  9. Ubuntu16.04下nvidia驱动+nvidia-docker+cuda9+cudnn7安装

    一.宿主机安装nvidia驱动 打开终端,先删除旧的驱动: sudo apt-get purge nvidia* 禁用自带的 nouveau nvidia驱动 sudo gedit /etc/modp ...

  10. apache+php+mysql搭建php环境

    1.首先准备解压包:zend-loader-php5.6-windows-x86_update1(nts版).php-5.6.37-nts-Win32-VC11-x86.mysql-5.5.19-wi ...