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 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67
| 1. 策略接口{ mark():返回策略的唯一标识符,用于策略路由和识别
patternMatchMark():支持正则表达式匹配的策略标识,增强灵活性
execute(REQUEST):执行策略的无返回值版本,适用于异步处理场景
executeResp(REQUEST):执行策略的有返回值版本,适用于需要返回结果的场景 }
2. 在配置类中选择器添加为Bean
3. 策略模式选择器:{ 1. 定义Map存储各种策略: private final Map<String, AbstractExecuteStrategy> abstractExecuteStrategyMap = new HashMap<>(); public void onApplicationEvent(ApplicationInitializingEvent event) { Map<String, AbstractExecuteStrategy> actual = ApplicationContextHolder.getBeansOfType(AbstractExecuteStrategy.class); actual.forEach((beanName, bean) -> { AbstractExecuteStrategy beanExist = abstractExecuteStrategyMap.get(bean.mark()); if (beanExist != null) { throw new ServiceException(String.format("[%s] 存在重复的执行策略", bean.mark())); } abstractExecuteStrategyMap.put(bean.mark(), bean); }); }
2. choose选择(1). 根据mark选择对应的策略 (2). 根据正则匹配
3. chooseAndExecute:通过choose获取具体的策略,再通过具体的策略执行execute }
4. 支付策略(支付宝){ 1. 继承抽象支付类,实现抽象执行策略接口 抽象支付类:payResponse:支付并响应 抽象策略执行接口:mark excute executeResp
2. 根据aliPay具体文档执行 }
5. 选座策略:在购票后进入座位选择器,座位选择器通过座位类型进行分组并分别进入不同的分配策略模式 1. 商务策略:自定义选择 2. 一等座 3. 二等座 完善订单详情并远程调用
6. 描述: 策略选择器: 1. 抽象策略模式选择器类,实现ApplicationListener接口,重写onApplicationEvent方法利用ApplicationContext获取抽象策略执行类,遍历以Mark为key存入Map中 2. 通过Chose方法根据mark或者正则匹配获取具体的策略 3. 通过chooseAndExecute方法获取具体策略并执行
抽象策略执行接口: 1. mark()标识方法 2. patternMathMark()执行策略匹配标识符 3. excuteResp()执行策略,带返回值 4. excute()执行策略,无返回值
具体策略类(支付宝支付): 1. 继承抽象支付类(Pay方法),实现抽象策略执行接口 2. executeResp()中调用Pay()方法 3. Pay()方法中使用AliClient进行具体支付操作
|