运维开发网

记录一次优化ifelse经历

运维开发网 https://www.qedev.com 2020-10-20 08:10 出处:51CTO 作者:wxflovejl
遇到一个需要多if-else判断执行的代码,采用策略模式进行优化原代码:Stringtype=json.getString("type");Stringdata=json.getString("data");if(type.equals("brand")){brandApplication.handler(data);}elseif(ty

遇到一个需要多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();

}

策略管理类@Component
br/>@Component
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的时候避免无限拷贝代码,而是只需要添加枚举类和对应的实现即可,达到简化代码并解耦的目的

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号