策略模式--应用
抽象策略父类
public abstract class AbstractOrderProofreadHandler { public AbstractOrderProofreadHandler() { OrderProofreadHandlerManager.putInstance(getChannelCode(), this); } public abstract ImportOrderBusinessResp proofreadOrder(String billCycle, Long hotelVid, List<TitcBussinessOrderBill> list); //策略名称 public abstract int getChannelCode(); /** * 拼接字符串 * * @param strs * @return */ protected String concat(Object... strs) { StringBuilder sb = new StringBuilder(); for (Object str : strs) { sb.append(str); } return sb.toString(); } }
策略子类,实现父类方法:
@Slf4j
@Component
public class YilonghuiOrderHandler extends AbstractOrderProofreadHandler {
/**
* 校验--PMS订单编码、活动优惠金额(艺龙会承担成本)、活动优惠金额(门店承担成本)、实付房费
*
* @param file
* @return
*/
@Override
public CheckImportOrderResultDto checkImportFileData(MultipartFile file) {
return resp;
}
@Override
public ImportOrderBusinessResp proofreadOrder(String billCycle, Long hotelVid, List<TitcBussinessOrderBill> list) {
return resp;
}
/**
* 艺龙会-12 、住哲-14 、同程艺龙-9
*
* @return
*/
@Override
public int getChannelCode() {
return 12;
}
}
加载策略:
public class OrderProofreadHandlerManager {
private static Map<Integer, AbstractOrderProofreadHandler> instance = new HashMap<>();
/**
* put
*
* @param channelCode 渠道名称
* @param handler 处理类
*/
public static void putInstance(Integer channelCode, AbstractOrderProofreadHandler handler) {
instance.put(channelCode, handler);
}
/**
* get
*
* @param channelCode 表名
* @return
*/
public static AbstractOrderProofreadHandler getInstance(Integer channelCode) {
if (Objects.isNull(channelCode)) {
return null;
}
return instance.get(channelCode);
}
public static Map<Integer, AbstractOrderProofreadHandler> getAllInstance() {
return instance;
}
}
使用场景:
//根据billchannel选择策略
AbstractOrderProofreadHandler orderProofreadHandler = OrderProofreadHandlerManager.getInstance(billChannel);
浙公网安备 33010602011771号