记录一次优化ifelse经历

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了记录一次优化ifelse经历相关的知识,希望对你有一定的参考价值。

遇到一个需要多if-else判断执行的代码,采用策略模式进行优化

原代码:
String type = json.getString("type");
String data = json.getString("data");
if(type.equals("brand")){
brandApplication.handler(data);
}else if(type.equals("location")){
locationApplication.handler(data);
}else if(type.equals("price")){
priceApplication.handler(data);
}........

优化后的结构:
策略类
public abstract class CreateDataBackup {
public void handler();
}

策略管理类br/>@Component
@Slf4j
public class DataBackupManager {

@Resource
private ApplicationContext applicationContext;

public CreateDataBackup getExecutor(String key) {
    DataBackupEnum[] values = DataBackupEnum.values();
    if (values.length <= 0) {
        return null;
    }
    for (DataBackupEnum value : values) {
        try {
            if (Objects.equals(key, value.getKey())) {
                return (CreateDataBackup) applicationContext.getBean(value.getBeanName());
            }
        } catch (Exception e) {
            log.error("获取CreateDataBackup异常", e);
            return null;
        }
    }
    return null;
}

}

具体实现类继承策略类
public class BrandLocationApplication extends CreateDataBackup

根据策略管理类取出对应实现类

所以最终优化结果就是

dataBackupManager.getExecutor(type).handler(data);

新增if-else的时候避免无限拷贝代码,而是只需要添加枚举类和对应的实现即可,达到简化代码并解耦的目的


以上是关于记录一次优化ifelse经历的主要内容,如果未能解决你的问题,请参考以下文章

记录一次 MongoDB aggregate的性能优化经历

记一次真实的webpack优化经历

Cg入门19:Fragment shader - 片段级模型动态变色

DSP底层优化的几个规律

一次vue-cli 2.x项目打包优化经历(优化xlsx插件)

记录一次经历的数据库从单库到分库分表的过程