关于if_else if .... 优化

2019-05-18  本文已影响0人  William_Wei007

优化之前的代码

略写代码 大致意思:从数据库,按照不通的类型,调用不同的方法.    

//注入 接口 (查询db的接口)     
    @Autowired
    StatisBatchStatusMapper; 

    
    public void  xxx(){
    
    
    List<String> batchNumList = Lists.newArrayList();
        if(infTypeEnum.equals(InfTypeEnum.USER_INFO)){
            batchNumList= statisBatchStatusMapper.getUserInfoBatchNum();
        }else if(infTypeEnum.equals(InfTypeEnum.PRODUCT)){
            batchNumList=statisBatchStatusMapper.getProductBatchNum();
        }else if(infTypeEnum.equals(InfTypeEnum.TRANSACTION_DETAILS)){
            batchNumList = statisBatchStatusMapper.getTransactionDetailsBatchNum();
        }else if(infTypeEnum.equals(InfTypeEnum.PRODUCT_STATUS)){
         ...
          还有好几个判断...赋值
        }
    
    
        ....略
    }

闲来无事, 突然想到貌似if .. else if ..这类的可以进行优化,

于是看了一些文章,感觉适用我的方法, 把一些数据,放到map中
就可以了 优化之后...

此处设计到查询数据库, 所以利用了 “类” 实现 “InitializingBean” 这个接口, 然后实现 抽象方法(afterPropertiesSet())来进行获取数据.

弊端就是项目启动初始化就会去加载这些. 如果用不到就浪费了.

 
    InfTypeEnum -- 枚举类型
    
    
    private static Map<InfTypeEnum, List<String>> handlerMap = new HashMap<>(12);
    
        
        
         @Override
    public void afterPropertiesSet() throws Exception {

        --  虽然是接口,但是spring 会自动进行实例化
        StatisBatchStatusMapper statisBatchStatusMapper=  SpringContextHolder.getApplicationContext().getBean(StatisBatchStatusMapper.class);

        handlerMap.put(InfTypeEnum.USER_INFO,statisBatchStatusMapper.getUserInfoBatchNum());
        handlerMap.put(InfTypeEnum.PRODUCT,statisBatchStatusMapper.getProductBatchNum());
        handlerMap.put(InfTypeEnum.PRODUCT_STATUS,statisBatchStatusMapper.getProdutStatusBatchNum());
        handlerMap.put(InfTypeEnum.REPAYMENT_PLAN,statisBatchStatusMapper.getRepaymentPlanBatchNum());
        handlerMap.put(InfTypeEnum.PURCHASE_INFO,statisBatchStatusMapper.getPurchaseInfoBatchNum());
        handlerMap.put(InfTypeEnum.PURCHASE_OPT,statisBatchStatusMapper.getPurchaseOptBatchNum());
        handlerMap.put(InfTypeEnum.RIGHT_INITIAL,statisBatchStatusMapper.getTrightInitialBatchNum());
       
       .....

    }
    
    经过上面的修改, 
    
    可以在调用处,直接就 通过map 的get("参数")方法获取相应的数据了.
    
    简洁明了...


上一篇下一篇

猜你喜欢

热点阅读