使用策略模式+工厂模式对接口进行分配处理。远离if else
背景:在项目中我们会遇到不同时间或者不同条件下,调用不同的方法或处理方式。因此我们可以采用策略模式进行满足不同的对象执行不同的具体行为。再用工厂模式进行匹配对应的对象。
首先我们做一下功课温习一下策略模式和工厂模式
好的补充的知识已经补充好了我们来干了。
1.定义一个统一接口:NewOrOldMethodService
/**
* 新旧方法选择的接口
* 使用策略模式+工厂模式进行处理
* 有助于后面接口新老接口替换和维护,远离可恶的if else
* @author 鼠飞文
* @date 2020-04-07
*/
public interface NewOrOldMethodService {
/**
* 使用default 是为了反正有的接口方法没有新老接口,接口实现者不用必须实现这个接口方法
* 获取数据
* @return
*/
default String findExceptionList(String param) {
return null;
};
}
2.创建一个类ExceptionOldServiceImpl实现NewOrOldMethodService接口
@Service
@Slf4j
public class ExceptionOldServiceImpl implements NewOrOldMethodService {
/**
* 这里是老接口实现方法
*
*/
@Override
public String findExceptionList(String param) {
return "这里是老接口实现方法";
}
}
3.创建一个类ExceptionNewServiceImpl实现NewOrOldMethodService接口
@Service
@Slf4j
public class ExceptionNewServiceImpl implements NewOrOldMethodService {
/**
* 这里是新接口实现方法
*
*/
@Override
public String findExceptionList(String param) {
return "这里是新接口实现方法";
}
}
4.先创建一个bean类似于工厂模式:NewOrOldMethodFactoryService
/**
* 工厂模式
* @date 2020-04-07
*/
@Component
public class NewOrOldMethodFactoryService {
/**
* 新的接口
*/
@Autowired
private ExceptionNewServiceImpl exceptionNewServiceImpl;
/**
* 老的接口
*/
@Autowired
private ExceptionOldServiceImpl exceptionOldServiceImpl;
/**
* 接口表
*/
public static final Map<Boolean, NewOrOldMethodService> map = new HashMap<>();
/**
* 在benan注入的时候
* 接口注册
*/
@PostConstruct
public void init() {
map.put(true,exceptionNewServiceImpl);
map.put(false, exceptionOldServiceImpl);
}
/**
* 获取对应的接口
* @param medalType
* @return
*/
public NewOrOldMethodService getService(boolean medalType) {
return map.get(medalType);
}
}
5.调用者只需要调用工厂类接口实现接口的半自动匹配
@Service
public class WmsExceptionServiceImpl implements WmsExceptionService {
@Autowired
private NewOrOldMethodFactoryService newOrOldMethodFactoryService;
/**
* 通过设置ture就可以自动分配到新的接口中
* @param param 参数
* @return
*/
@Override
public String findNewExceptionList(String param) {
return newOrOldMethodFactoryService.getService(true).findExceptionList(param);
}
}
好了上面的案例已经写完了,如果有缺陷可以来踢