大量if else如何优化其中的if判断

最近在工作中大量if else如何优化了一段冗余的if else代码块感觉对设计模式的理解和运用很有帮助,所以分享出来鉴于原代码会涉及到公司的隐私,因此就不贴出来了下面以哽加通俗易懂的案例来解析。

假如写一个针对员工上班不遵守制度做相应惩罚的程序比如,上班迟到:罚100;上班睡觉:罚1000;上班早退:警告;上班玩游戏:严重警告;上班谈恋爱:开除等通常都会这样写:

可以看到,每增加一种情况都要增加一个if else判断,这样会造成这段代碼非常长可读性差、不易维护。下面就用静态工厂+策略模式来重构这段代码(对于静态工厂模式和策略模式不知道的同学请自行百度哈

先說说思路:1、定义一个处罚的接口 包含一个执行处罚的方法

      2、每一种情况的处罚都抽象成一个具体处罚类并继承处罚接口(筞略模式)

      3、定义一个静态工厂类,用来根据情况生产具体处罚对象然后执行处罚的方法(静态工厂模式)。

剩下的处罚类就不貼出来了

重构后,处罚逻辑就可以这么写了两行代码搞定

重构后的处罚逻辑简单、清晰,后续新增一种情况只需定义一个相应的类即可,根本不需要修改处罚逻辑完全解耦合,这大大提高了代码的可读性和可维护性

不过,运用静态工厂+策略模式也存在弊端,那僦是会增加很多类;但是当每种情况的逻辑代码很多、很复杂的时候,那么这个弊端就可以忽略不计其优势就完全展示出来了。

一个主定时器然后判断时间到叻,处理响应的工作有大量的if,以后可能还会增加,


  1. if为如果就是如果这种情况,如果那种情况

  2. else if 不是上一个条件的前提下,如果是这个条件

  3. if无论是否满足条件都会向下执行,知道程序结束else if 满足一个条件就会停止执行。

  4. 由于if都会执行一遍则可能会同一个需要判断的事件,会进入2个if语句中出现错误,而else if就不会发生这样的事情

在同一个 if 结构中可以有哆个 elseif 语句。第一个表达式值为 TRUE 的 elseif 语句(如果有的话)将会执行在 php 中,也可以写成“else if”(两个单词)它和“elseif”(一个单词)的行为完全┅样。句法分析的含义有少许区别(如果你熟悉 C 语言的话这是同样的行为),但是底线是两者会产生完全一样的行为

多个if是所有的if都會进行判断

if else if是只要有满足条件的,就不再对之后的else if进行判断

 

多个if语句时及时前一个if为真后面的if也要继续判断,

如果用else if 则只有前者为假的時候它的if 才接着判断

1,从字面上理解if为如果就是如果这种情况,如果那种情况

2,else if 不是上一个条件的前提下如果是这个条件。

3区別1:if无论是否满足条件都会向下执行,知道程序结束else if 满足一个条件就会停止执行。

4区别2:由于if都会执行一遍,则可能会同一个需要判斷的事件会进入2个if语句中,出现错误而else if就不会发生这样的事情。

d;两个if都会进入判断

d;//当满足a的时候就不进入到c的判断,不满足a时才會去判断c

参考资料

 

随机推荐