标签:erro type 代码 pre executor 添加 manage code gets
遇到一个需要多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的时候避免无限拷贝代码,而是只需要添加枚举类和对应的实现即可,达到简化代码并解耦的目的
标签:erro type 代码 pre executor 添加 manage code gets
原文地址:https://blog.51cto.com/8452404/2542446