策略模式--应用

抽象策略父类
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);

posted on 2022-03-12 20:40  潮流教父孙笑川  阅读(33)  评论(0)    收藏  举报

导航