多个switch-case分支替代

1.对于多个switch-case的分支,不同分支调用不用方法

 if (2 == taskSign.getReportType()) {
            switch (taskSign.getOperateType()) {
                //1:虚拟电厂聚合运行数据变更上送
                case 1:
                    return vppRealDataService.vppRealDataUp(objData);
                //代理用户运行数据变更上送
                case 2:
                    return vppConsRealDataService.vppConsRealDataUp(objData);
                //聚合单元(分路)运行变更上送
                case 3:
                    return vppShuntRealDataService.vppShuntRealDataUp(objData);
                //设备运行数据变更上送
                case 4:
                    return vppDevRealDataService.vppDevRealDataUp(objData);
            }
            //4表示模型
        } else if (4 == taskSign.getReportType()) {
            switch (taskSign.getOperateType()) {
                // 0:虚拟电厂档案新增
                case 0:
                    return vppDataService.addVppData(objData);
                //1:虚拟电厂档案修改
                case 1:
                    return vppDataService.updateVppData(objData);
                //  2:虚拟电厂档案删除
                case 2:
                    return vppDataService.deleteVppData(objData);
                // 3:代理用户档案新增
                case 3:
                    return vppConsDataService.addConsData(objData);
                //4:代理用户档案修改
                case 4:
                    return vppConsDataService.updateConsData(objData);
                //5:代理用户档案删除
                case 5:
                    return vppConsDataService.deleteConsData(objData);
                //6:聚合单元(分路)档案新增
                case 6:
                    return vppConsShuntDataService.addConsShuntData(objData);
                //7:聚合单元(分路)档案修改
                case 7:
                    return vppConsShuntDataService.updateConsShuntData(objData);
                // 8:聚合单元(分路)档案删除
                case 8:
                    return vppConsShuntDataService.deleteConsShuntData(objData);
                //9:设备档案新增
                case 9:
                    return vppShuntDevDataService.addVppShuntDevData(objData);
                //10:设备档案修改
                case 10:
                    return vppShuntDevDataService.updateVppShuntDevData(objData);
                //11:设备档案删除
                case 11:
                    return vppShuntDevDataService.deleteVppShuntDevData(objData);
            }

1.创建一个获取bean对象的类

package com.cqlvc.vpp.utils;

import org.springframework.beans.BeansException;
import org.springframework.context.ApplicationContext;
import org.springframework.context.ApplicationContextAware;
import org.springframework.stereotype.Component;

@Component
public class SpringContextUtil implements ApplicationContextAware {
    private static ApplicationContext applicationContext;

    @Override
    public void setApplicationContext(ApplicationContext context) throws BeansException {
        applicationContext = context;
    }

    /**
     * 静态加载applicationContext
     */

    public static ApplicationContext getApplicationContext() {
        return applicationContext;
    }

    /**
     * 通过反射获取Bean
     *
     * @param requiredType
     * @param <T>
     * @return
     */
    public static <T> T getBean(Class<T> requiredType) {
        return getApplicationContext().getBean(requiredType);
    }

    /**
     * 通过id名获取bean
     *
     * @param name
     * @param <T>
     * @return
     */
    public static <T> T getBean(String name) {
        return (T) getApplicationContext().getBean(name);
    }


}


2.j创建一个类来将if (2 == taskSign.getReportType())下的分支放入map中

package com.cqlvc.vpp.utils;

import com.cqlvc.process.common.core.domain.R;
import com.cqlvc.vpp.domain.dto.record.ObjDataDTO;
import com.cqlvc.vpp.service.record.*;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

@Component
public class VppRealDataUtil {

    Map<Integer, Function<ObjDataDTO, R>> map = new HashMap<>();
    private static VppRealDataUtil vppRealDataUtil;

    private static final VppRealDataService vppRealDataService = SpringContextUtil.getBean(VppRealDataService.class);
    private static final VppConsRealDataService vppConsRealDataService = SpringContextUtil.getBean(VppConsRealDataService.class);
    private static final VppShuntRealDataService vppShuntRealDataService = SpringContextUtil.getBean(VppShuntRealDataService.class);
    private static final VppDevRealDataService vppDevRealDataService = SpringContextUtil.getBean(VppDevRealDataService.class);

    // 使用单例模式实例化当前工厂类实例
    public static VppRealDataUtil getVppRealDataUtil() {
        if (vppRealDataUtil == null) {
            synchronized (VppRealDataUtil.class) {
                if (vppRealDataUtil == null) {
                    vppRealDataUtil = new VppRealDataUtil();
                }
            }
        }
        return vppRealDataUtil;
    }

    VppRealDataUtil() {
        // 初始化定义
        map.put(1, this::function1);
        map.put(2, this::function2);
        map.put(3, this::function3);
        map.put(4, this::function4);
    }

    // 传入type来获取需要执行的方法,type可以使用枚举类的方式来代替
    public Function<ObjDataDTO, R> getFunction(int type) {
        return map.get(type);
    }

    private R function1(ObjDataDTO objData) {
        return vppRealDataService.vppRealDataUp(objData);
    }

    private R function2(ObjDataDTO objData) {
        return vppConsRealDataService.vppConsRealDataUp(objData);
    }

    private R function3(ObjDataDTO objData) {
        return vppShuntRealDataService.vppShuntRealDataUp(objData);
    }

    private R function4(ObjDataDTO objData) {
        return vppDevRealDataService.vppDevRealDataUp(objData);
    }

}

再创建一个类将if (4 == taskSign.getReportType())下的分支放入map中

package com.cqlvc.vpp.utils;

import com.cqlvc.process.common.core.domain.R;
import com.cqlvc.vpp.domain.dto.record.ObjDataDTO;
import com.cqlvc.vpp.service.record.*;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Component;

import java.util.HashMap;
import java.util.Map;
import java.util.function.Function;

@Component
public class VppDataUtil {

    Map<Integer, Function<ObjDataDTO, R>> map = new HashMap<>();
    private static VppDataUtil vppDataUtil;

    private static final VppDataService vppDataService = SpringContextUtil.getBean(VppDataService.class);
    private static final VppConsDataService vppConsDataService = SpringContextUtil.getBean(VppConsDataService.class);
    private static final VppConsShuntDataService vppConsShuntDataService = SpringContextUtil.getBean(VppConsShuntDataService.class);
    private static final VppShuntDevDataService vppShuntDevDataService = SpringContextUtil.getBean(VppShuntDevDataService.class);

    // 使用单例模式实例化当前工厂类实例
    public static VppDataUtil getVppDataUtil() {
        if (vppDataUtil == null) {
            synchronized (VppDataUtil.class) {
                if (vppDataUtil == null) {
                    vppDataUtil = new VppDataUtil();
                }
            }
        }
        return vppDataUtil;
    }

    VppDataUtil() {
        // 初始化定义
        map.put(0, this::function1);
        map.put(1, this::function2);
        map.put(2, this::function3);
        map.put(3, this::function4);
        map.put(4, this::function5);
        map.put(5, this::function6);
        map.put(6, this::function7);
        map.put(7, this::function8);
        map.put(8, this::function9);
        map.put(9, this::function10);
        map.put(10, this::function11);
        map.put(11, this::function12);

    }

    // 传入type来获取需要执行的方法,type可以使用枚举类的方式来代替
    public Function<ObjDataDTO, R> getFunction(int type) {
        return map.get(type);
    }

    private R function1(ObjDataDTO objData) {
        return vppDataService.addVppData(objData);

    }

    private R function2(ObjDataDTO objData) {
        return vppDataService.updateVppData(objData);

    }

    private R function3(ObjDataDTO objData) {
        return vppDataService.deleteVppData(objData);

    }

    private R function4(ObjDataDTO objData) {
        return vppConsDataService.addConsData(objData);
    }

    private R function5(ObjDataDTO objData) {
        return vppConsDataService.updateConsData(objData);
    }

    private R function6(ObjDataDTO objData) {
        return vppConsDataService.deleteConsData(objData);
    }

    private R function7(ObjDataDTO objData) {
        return vppConsShuntDataService.addConsShuntData(objData);
    }

    private R function8(ObjDataDTO objData) {
        return vppConsShuntDataService.updateConsShuntData(objData);
    }

    private R function9(ObjDataDTO objData) {
        return vppConsShuntDataService.deleteConsShuntData(objData);
    }

    private R function10(ObjDataDTO objData) {
        return vppShuntDevDataService.addVppShuntDevData(objData);
    }

    private R function11(ObjDataDTO objData) {
        return vppConsDataService.updateConsData(objData);
    }

    private R function12(ObjDataDTO objData) {
        return vppConsDataService.deleteConsData(objData);
    }


}

最后修改调用方法的类

VppDataUtil vppDataUtil = VppDataUtil.getInstance();
        VppRealDataUtil vppRealDataUtil = VppRealDataUtil.getVppRealDataUtil();
        //2.表示实时数据
        if (2 == taskSign.getReportType()) {
            return vppRealDataUtil.getFunction(taskSign.getOperateType()).apply(objData);
        } else if (4 == taskSign.getReportType()) {
            return vppDataUtil.getFunction(taskSign.getOperateType()).apply(objData);
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值