问题:if else代码以下图如何优化json
if (ComponentTypeEnum.bar.name().equals(screenData.getComponentType())) { return ResponseUtil.success(barService.get(screenData.getJsonData())); } else { return ResponseUtil.success(yBarService.get(screenData.getJsonData())); }
优化流程app
第一步:建立工厂方法用于根据条件,生成不一样的服务类实现ide
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 <T> * @return */ public static <T> T getBean(Class<T> clazz) { return getApplicationContext().getBean(clazz); } /** * 经过name,以及Clazz返回指定的Bean * * @param name * @param clazz * @param <T> * @return */ public static <T> T getBean(String name, Class<T> clazz) { return getApplicationContext().getBean(name, clazz); } }
第二步:建立一个适配器类,用于匹配工厂方法,产生的不一样服务类实现,并带调用具体实现类this
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行。条件越多,效果更明显。哈哈!!!get