当前位置: 首页 > news >正文

基于事件驱动和策略模式的差异化处理方案

一、支付成功后事件驱动

        1、支付成功事件

/*** 支付成功事件** @author ronshi* @date 2025/5/12 14:40*/
@Getter
@Setter
public class PaymentSuccessEvent extends ApplicationEvent {private static final long serialVersionUID = 1L;private ProductOrderDO productOrderDO;public PaymentSuccessEvent(Object source, ProductOrderDO productOrderDO) {super(source);this.productOrderDO = productOrderDO;}
}

        2、事件触发入口

@Autowired
private ApplicationEventPublisher eventPublisher;public Boolean handlePaymentResult(HandlePaymentResultCmd cmd) {//其他业务逻辑处理//发布领域事件(解耦后续处理)eventPublisher.publishEvent(new PaymentSuccessEvent(this, productOrderDO));return true;}

         3、事件监听器 

/*** 支付成功事件监听器** @author ronshi* @date 2025/5/12 15:20*/
@RequiredArgsConstructor
@Component
public class PaymentSuccessEventHandler {private final PaymentSuccessStrategyFactory orderPaymentStrategyFactory;/*** 处理支付成功事件** @param event 支付成功事件*/@EventListenerpublic void handleEvent(PaymentSuccessEvent event) {System.out.println("【处理支付成功事件】:" + event.getProductOrderDO().getId());IPaymentSuccessStrategy strategy = orderPaymentStrategyFactory.getStrategy(event.getProductOrderDO().getOrderType());strategy.execute(event.getProductOrderDO());}
}

二、不同订单类型的策略模式处理

         1、订单支付策略

/*** 订单支付策略** @author ronshi* @date 2025/5/12 14:58*/
public interface IPaymentSuccessStrategy {/*** 执行方法** @param productOrderDO 订单信息*/void execute(ProductOrderDO productOrderDO);/*** 获取该策略支持的订单类型** @return 订单类型*/String getSupportedOrderType();
}

         2、新购订单支付策略

/*** 新购订单支付策略** @author ronshi* @date 2025/5/12 15:51*/
@Component
public class PurchasePaymentSuccessStrategy implements IPaymentSuccessStrategy {/*** 执行方法** @param productOrderDO 订单信息*/@Overridepublic void execute(ProductOrderDO productOrderDO) {System.out.println("【新购订单支付策略】:" + productOrderDO.getId());}/*** 获取该策略支持的订单类型** @return 订单类型*/@Overridepublic String getSupportedOrderType() {return OrderTypeEnum.PURCHASE.getCode();}
}

         3、续费订单支付策略

/*** 续费订单支付策略** @author ronshi* @date 2025/5/12 15:53*/
@Component
public class RenewPaymentSuccessStrategy implements IPaymentSuccessStrategy {/*** 执行方法** @param productOrderDO 订单信息*/@Overridepublic void execute(ProductOrderDO productOrderDO) {System.out.println("【续费订单支付策略】:" + productOrderDO.getId());}/*** 获取该策略支持的订单类型** @return 订单类型*/@Overridepublic String getSupportedOrderType() {return OrderTypeEnum.RENEW.getCode();}
}

           4、订单支付策略工厂

/*** 订单支付策略工厂** @author ronshi* @date 2025/5/12 15:56*/
@RequiredArgsConstructor
@Component
public class PaymentSuccessStrategyFactory {private final Map<String, IPaymentSuccessStrategy> strategyMap;/*** 获取订单支付策略** @param orderType 订单类型* @return 订单支付策略*/public IPaymentSuccessStrategy getStrategy(String orderType) {for (IPaymentSuccessStrategy strategy : strategyMap.values()) {if (strategy.getSupportedOrderType().equals(orderType)) {return strategy;}}throw new BusinessServiceException("没有对应的订单支付策略");}}

http://www.dtcms.com/a/185410.html

相关文章:

  • Python动态渲染页面抓取之Selenium使用指南
  • 基于 51 单片机的 PWM 电机调速系统实现
  • 【AI提示词】波特五力模型专家
  • Linux常用命令详解(上):目录与文件操作及拷贝移动命令
  • OpenMCU(六):STM32F103开发板功能介绍
  • mac M2下的centos8:java和jenkins版本匹配,插件安装问题
  • 电厂除灰系统优化:时序数据库如何降低粉尘排放
  • 支付宝API-SKD-GO版
  • HBase进阶之路:从原理到实战的深度探索
  • 基于LVS和Keepalived实现高可用负载均衡架构
  • Spring Data Elasticsearch 中 ElasticsearchOperations 构建查询条件的详解
  • Kotlin 异步初始化值
  • P2P架构
  • 用 AltSnap 解锁 Windows 窗口管理的“魔法”
  • lua入门语法,包含安装,注释,变量,循环等
  • NY115NY121美光科技芯片NY122NY130
  • 添加购物车-02.代码开发
  • 讲讲git 和svn
  • VUE中通过DOM导出PDF
  • SET NX互斥功能的实现原理
  • 电商平台 WAF 防护终极指南
  • 云平台管理部署知识点——问题+答案
  • HTTP方法和状态码(Status Code)
  • 软考教材重点内容 信息安全工程师 第24章 工控安全需求分析与安全保护工程
  • Spring AI 与 Groq 的深度集成:解锁高效 AI 推理新体验
  • CTF实战秘籍:跨平台文件合并与数据重构技术
  • 用postman的时候如何区分服务器还是自己的问题?
  • PyTorch随机数控制全指南:从种子设置到状态管理
  • pclinuxos系统详解
  • AI 时代 UI 设计的未来范式