2022-04-01 by Insuonante
原本的程序中有一个根据不同业务需求,调用不同接口的需求。
当时业务比较简单,所以直接写了两个if语句来分别实现:
if ("05".equals(code)){
05handler.query();
}
if("06".equals(code)){
06handler.query();
}
但是随着需求的增加,接口数量也在不断地增加,原本的if判断越来越多,主类就变得十分臃肿。 \
if("05".equals(code)){
05handler.query();
}
if("06".equals(code)){
06handler.query();
}
if ("07".equals(code)){
07handler.query();
}
if("08".equals(code)){
08handler.query();
}
所以优化就势在必行,优化方式为使用策略模式+工厂模式。
先定义一个用来返回业务需求的接口
public interface BaseCustomerReportInfo {
CustomerInfoResponse getCustomerReportInfo();
}
接着根据不同的实际业务分别来实现接口
这里只拿了一个测试需求来举例:
public class CustomerReportInfo05 implements BaseCustomerReportInfo {
@Override
public CustomerInfoResponse getCustomerReportInfo() {
CustomerInfoResponse customerInfoResponse = new CustomerInfoResponse();
CustomerReportInfo reportInfo = new CustomerReportInfo();
reportInfo.setName("张某某");
reportInfo.setCertId("1308001xxx05xx0141");
reportInfo.setCertType("10");
reportInfo.setOtherInfo("总是吃不饱,天天肚子饿!");
customerInfoResponse.setResultCode("000000");
customerInfoResponse.setResultMessage("查询成功");
customerInfoResponse.setCustomerName("张某某");
customerInfoResponse.setCustomerReportInfo(reportInfo);
return customerInfoResponse;
}
}
创建实现类的工厂
public class CustomerReportInfoServiceFactory {
private static final Map<String, BaseCustomerReportInfo> map = new HashMap<>();
static {
map.put("05",new CustomerReportInfo05());
map.put("06",new CustomerReportInfo06());
map.put("07",new CustomerReportInfo07());
map.put("08",new CustomerReportInfo08());
}
public static BaseCustomerReportInfo getCustomerReportInfoService(String esbCode){
return map.get(esbCode);
}
}
最后主类的实际写法就变成了这个样子
public CustomerInfoResponse getCustomerInfo(String esbCode){
BaseCustomerReportInfo customerReportInfo = CustomerReportInfoServiceFactory.getCustomerReportInfoService(esbCode);
CustomerInfoResponse response = customerReportInfo.getCustomerReportInfo();
return response;
}
代码看起来清爽多了。