问题:if else代码如下图如何优化
if (ComponentTypeEnum.bar.name().equals(screenData.getComponentType())) {
return ResponseUtil.success(barService.get(screenData.getJsonData()));
} else {
return ResponseUtil.success(yBarService.get(screenData.getJsonData()));
}
优化流程
第一步:创建工厂方法用于根据条件,生成不同的服务类实现
public class BarServiceFactory {
public static BarService getInstance(String type) {
if (ComponentTypeEnum.bar.name().equals(type)) {
return SpringContextUtil.getBean(BarServiceImpl.class);
}else if (ComponentTypeEnum.ybar.name().equals(type)){
return SpringContextUtil.getBean(YBarServiceImpl.class);
}
return null;
}
}
其中SpringContextUtil代码如下:
@Component
public class SpringContextUtil implements ApplicationContextAware {
/**
* 上下文对象实例
*/
private static ApplicationContext applicationContext;
@Override
public void setApplicationContext(ApplicationContext applicationContext) throws BeansException {
SpringContextUtil.applicationContext = applicationContext;
}
/**
* 获取applicationContext
*
* @return
*/
public static ApplicationContext getApplicationContext() {
return applicationContext;
}
/**
* 通过name获取 Bean.
*
* @param name
* @return
*/
public static Object getBean(String name) {
return getApplicationContext().getBean(name);
}
/**
* 通过class获取Bean.
*
* @param clazz
* @param
* @return
*/
public static T getBean(Class clazz) {
return getApplicationContext().getBean(clazz);
}
/**
* 通过name,以及Clazz返回指定的Bean
*
* @param name
* @param clazz
* @param
* @return
*/
public static T getBean(String name, Class clazz) {
return getApplicationContext().getBean(name, clazz);
}
}
第二步:创建一个适配器类,用于匹配工厂方法,产生的不同服务类实现,并带调用具体实现类
public class BarServiceAdapter implements BarService{
private BarService barService;
public BarServiceAdapter(BarService barService){
this.barService = barService;
}
@Override
public Option get(String json){
return barService.get(json);
}
}
第三步:修改对应的代表,已经无需使用if else语句
Option option = new BarServiceAdapter(BarServiceFactory.getInstance(screenData.getComponentType())).get(screenData.getJsonData());
return ResponseUtil.success(option);
通过以上优化步骤,由原先4行代码优化到了2行。条件越多,效果更明显。哈哈!!!