工厂模式加策略模式实现动态选择类
/**
* 退款实现接口
*/
public interface RefundIdentifyService {
CommonNotify toRefund(RefundModel refundModel);
}
//支付宝退款实现
@AllArgsConstructor
@Service
public class AliIdentifyService implements RefundIdentifyService {
private final RefundUtil refundUtil;
@PostConstruct
private void init() {
//注册类型
RefundIdentifyFactory.register(1, this);
}
@Override
public CommonNotify toRefund(RefundModel refundModel) {
//todo something
return new CommonNotify(false, response.getSubMsg());
}
}
//微信退款实现
@AllArgsConstructor
@Service
public class WxIdentifyService implements RefundIdentifyService {
private final RefundUtil refundUtil;
@PostConstruct
private void init() {
//注册类型
RefundIdentifyFactory.register(2, this);
}
@Override
public CommonNotify toRefund(RefundModel refundModel) {
//todo something
return refundUtil.wxRefund(wxRefund);
}
}
//设置工厂
public class RefundIdentifyFactory {
private static Map<Integer, RefundIdentifyService> ocrFactory = new HashMap<>();
/**
* 通过策略工厂注入IOcrIdentifyService接口的各个实现类
*
* @param type 退款类型
* @param refundIdentifyService 实现类
*/
public static void register(Integer type, RefundIdentifyService refundIdentifyService) {
if (null != type) {
ocrFactory.put(type, refundIdentifyService);
}
}
/**
* 根据订单类型获取不同的实现类
*
* @param type 订单支付方式
* @return
*/
public static RefundIdentifyService createObj(Integer type) {
return ocrFactory.get(type);
}
}
//调用
CommonNotify commonNotify = RefundIdentifyFactory.createObj(orderInfo.getType()).toRefund(refundModel);