写这篇文章的目的和上一篇单例模式一样,策略模式也是一种常用的设计模式,太多的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. SpringBoot2.X整合Actuator

    一 说明 Actuator 的定义 actuator 是一个制造术语,指的是用于移动或控制某物的机械装置.执行器可以通过一个小的变化产生大量的运动. 要将 actuator 添加到基于 Maven 的 ...

  2. 前端技术之:常用webpack插件

    1.html-webpack-plugin Simplifies creation of HTML files to serve your webpack bundles.   主页地址: https ...

  3. 知否知否,VS Code 不止开源

    VS Code, 昨夜始于“开源”,如今“开源”深处渡. 读者看到这句话,也许会有疑惑,为什么两个“开源”都加上了双引号? 其实是笔者有意为之,因为这个两个“开源”的意义有着很大的差别,第一个“开源” ...

  4. Azure上MySQL的离线备份:将备份拷贝到Azure Blob上

    公司在Azure的Iaas虚拟机上部署有好几台MySQL数据库,至于没有选择Azure Database for MySQL,是因为预算有限(钱不够啊!说多了也是泪,坑的还是DBA自己).选择了Iaa ...

  5. vue cli 4.0.5 的使用

    vue cli 4.0.5 的使用 现在的 vue 脚手架已经升级到4.0的版本了,前两日vue 刚发布了3.0版本,我看了一下cli 4 和cli 3 没什么区别,既然这样,就只总结一下vue cl ...

  6. MIT线性代数:4.A的LU分解

  7. Oracle Dorp 表数据恢复

    利用Oracle 数据回闪机制进行恢复,当一个表被drop掉,表会被放入recyclebin回收站,可通过回收站做表的闪回.表上的索引.约束等同样会被恢复不支持sys/system用户表空间对象,可通 ...

  8. [专题总结]AC自动机

    其实前面的模板也不是1A,我在题库里提前做过,也不必在意罚时,刚开始我在做别的专题 裸模板我就不说了,各个博客讲解的很明白 void insert(string s){ ,len=s.size(); ...

  9. 磁盘冗余阵列之RAID10的配置

    1988年由加利福尼亚大学伯克利分校发表的文章首次提到并定义了RAID,当今CPU性能每年可提升30%-50%但硬盘仅提升7%,渐渐的已经成为计算机整体性能的瓶颈,并且为了避免硬盘的突然损坏导致数据丢 ...

  10. 01-MyBatis启动流程分析

    目录 MyBatis简单介绍 启动流程分析 简单总结 附录 MyBatis内置别名转换 参考 MyBatis简单介绍 MyBatis是一个持久层框架,使用简单,学习成本较低.可以执行自己手写的SQL语 ...