策略模式--应用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | 抽象策略父类<br> 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(); } } |
策略子类,实现父类方法:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | @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 ; } } |
加载策略:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 | 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);
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· winform 绘制太阳,地球,月球 运作规律
· 上周热点回顾(3.3-3.9)