【代码优化与重构技巧】用ImmutableMap来替换大量if/else判断

在平时开发中会遇到很多类似于根据不同的场景获取不同的值的场景,最常想到的就是用if/else进行判断处理。

但是这种写法,代码的复用性和可读性就会很差,而且耦合性就会很高。那么在改动时可能会影响整体功能,从而在新增/删除时就需要重测功能。

改造优化前的代码

先上代码:可以看到大量的if/else判断,当然还有人喜欢用switch/case语句。

public static String getResult(String inParam){
        if ("A".equals(inParam)){
            return "java";
        }else if ("B".equals(inParam)){
            return "python";
        }else if ("C".equals(inParam)){
            return "php";
        }else{
            return "c";
        }
}

假如说后续要增加一个类型,那么就需要继续在if/else中加判断,对代码的可读性就会很差。

改造优化后的代码

可以用ImmutableMap,它是map的一种,可以在里面存放需要映射的对象关系的值。

查看源码可知:ImmutableMap是一个不可变的Map对象。

这样用的话,不论新增还是删除,都需要调整map中的数据即可,而不需要改动业务逻辑的代码。

在使用时有两种用法

//用法1
ImmutableMap.of();
//用法2
ImmutableMap.<String,String>builder()
            .put("A","java")
            .build();

那以用法1为例:

public class ImmutableMapDemo {

    public static final Map<String,String> resultMap =
            ImmutableMap.of(
                    "A","java",
                    "B","python",
                    "C","php",
      				"D","c"
            );

    public static void main(String[] args) {
        String aa=resultMap.get("A");
        System.out.printf(aa);
    }
}
每个判断分支逻辑很复杂,可引入策略模式

举例,在:“A”这个判断的分支时,需要引入很多的业务处理再返回时,可以运用设计模式中的策略模式。

具体可参考我写的另一篇文章:

【设计模式】策略模式(简易版)

可以针对每个不同的值,进入到不同的方法中进行处理。这样会降低代码的耦合性。

特别说明

ImmutableMap.of方法入参最多只能有5对,如果添加的数据超过5对,需要改用builder方法.

Map<String, String> INTEGER_STRING_MAP = new ImmutableMap.Builder<String, String>().
                    put("A","java").
                    put("B","python").
                    put("C","php").
                    put("D","c").
    				put("E","c++").
    				put("F","vue").
                    build();
复盘
  • 减少if/else的目的在于,可读性会提升;
  • 降低代码的耦合性,以达到新增/删除时,不调整代码的业务逻辑;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值