Java 条件判断语句优化

背景

最近刷手机的时候,总是看到一些文章(if else语句优化),基本都是在讨论,对于一大串的if else语句,该怎么写才能既简单又易读。看了好几篇类似的文章,我也来简单说说我自己的看法。

优化方案

1、策略模式

条件判断语句的优化,大家都知道的一种方式:策略模式,那我就先从策略模式分析。

这里我们先来看看菜鸟教程里面是怎么讲策略模式的,我这里直接截图的菜鸟教程里面的内容。(本人懒)

再来看看它给的例子

步骤 1
创建一个接口。
Strategy.java
public interface Strategy {
   public int doOperation(int num1, int num2);
}
步骤 2
创建实现接口的实体类。
OperationAdd.java
public class OperationAdd implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 + num2;
   }
}
OperationSubstract.java
public class OperationSubstract implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 - num2;
   }
}
OperationMultiply.java
public class OperationMultiply implements Strategy{
   @Override
   public int doOperation(int num1, int num2) {
      return num1 * num2;
   }
}
步骤 3
创建 Context 类。
Context.java
public class Context {
   private Strategy strategy;
 
   public Context(Strategy strategy){
      this.strategy = strategy;
   }
 
   public int executeStrategy(int num1, int num2){
      return strategy.doOperation(num1, num2);
   }
}
步骤 4
使用 Context 来查看当它改变策略 Strategy 时的行为变化。
StrategyPatternDemo.java
public class StrategyPatternDemo {
   public static void main(String[] args) {
      Context context = new Context(new OperationAdd());    
      System.out.println("10 + 5 = " + context.executeStrategy(10, 5));
 
      context = new Context(new OperationSubstract());      
      System.out.println("10 - 5 = " + context.executeStrategy(10, 5));
 
      context = new Context(new OperationMultiply());    
      System.out.println("10 * 5 = " + context.executeStrategy(10, 5));
   }
}

从上面给的实例来看,其实并没有真正意义上的去舍弃if else,还是需要根据条件判断,来获取对应的实例。

当然了,还有一种做法就是将各个实例放入到一个map中,以后可以直接map.get(xx) 来获取到对应的实例,是可以省去if else的判断了。

但是这样做的话,在新增一个条件的时候,我们不仅仅要再去实现一个Strategy接口,还要将这个对象放入到map中,变相的导致了我们编码的复杂度。

所以个人不喜欢使用策略模式。(可能也是我孤陋寡闻,不知道更好的方式)

说了一下个人对策略模式的意见,那我在说说平时,我喜欢使用的方式:java枚举。

2、枚举

这里就不多说了,直接给出例子,更直观。

// 定义了一个枚举
public enum TestEnum {
    ONE {
        void build() {
            System.out.println("ONE");
        }
    },
    TWO {
        void build() {
            System.out.println("TWO");
        }
    };

    abstract void build();
}

//根据条件调用不同的执行方式
public class Test {

    public static void main(String[] args) throws Exception {
        TestEnum test = TestEnum.valueOf("ONE");
        test.build();
    }
}

 从上面的内容来看,枚举可能是更好的选择方式(可能还有别的我不知道方式)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值