行业资讯 2025年08月6日
0 收藏 0 点赞 988 浏览 2937 个字
摘要 :

文章目录 优点 购票代码重构 定义抽象责任链组件 定义购买车票过滤器 实现购票逻辑接口 总结 本文主要讲解关于责任链模式案例详解相关内容,让我们来一起学习下吧! ……




  • 优点
  • 购票代码重构
    • 定义抽象责任链组件
    • 定义购买车票过滤器
    • 实现购票逻辑接口
  • 总结

本文主要讲解关于责任链模式案例详解相关内容,让我们来一起学习下吧!

概念:责任链模式是一种行为设计模式,就是我们可以构建一个处理请求的处理链,每一个处理器依次处理请求,直到该请求被处理完毕责任链模式案例详解

优点

两个方面:

  • 可以将请求发送者和接收者解耦,就是请求发送者不需要知道是谁处理的最终结果,增强了系统的灵活性和可扩展性
  • 可以动态地添加、删除和调整处理者对象,从而灵活地构建处理链

购票代码重构

对于列车购票接口进行重构

定义抽象责任链组件

 /**
  * 抽象业务责任链组件
  *
  */
 public interface AbstractChainHandler<T> extends Ordered {
 ​
     /**
      * 执行责任链逻辑
      *
      * @param requestParam 责任链执行入参
      */
     void handler(T requestParam);
 ​
     /**
      * @return 责任链组件标识
      */
     String mark();
 }
 ​

这段代码中定义了两个抽象方法,其中一个来执行责任链逻辑,一个来返回责任链组件标识,用来标记和区分不同的责任链处理器,然后它继承了Ordered接口,Ordered 接口中定义了一个 getOrder 方法,返回一个整数值,表示组件的执行顺序

为什么要继承ordered接口

在Spring容器中,通过自动扫描并识别实现了Ordered接口的组件,Spring会根据这些组件的执行顺序构建责任链。数值小的组件具有更高的执行优先级,因此它们会在责任链中的数值较大的组件之前执行。

定义购买车票过滤器

 /**
  * 列车购买车票过滤器
  *
  */
 public interface TrainPurchaseTicketChainFilter<T extends PurchaseTicketReqDTO> extends AbstractChainHandler<PurchaseTicketReqDTO> {
 ​
     @Override
     default String mark() {
         return TicketChainMarkEnum.TRAIN_PURCHASE_TICKET_FILTER.name();
     }
 }
 ​

这段代码定义了一个接口 TrainPurchaseTicketChainFilter,它继承了抽象业务责任链组件

<T extends PurchaseTicketReqDTO>是一个泛型约束,表明该接口的实现类必须是PurchaseTicketReqDTO及其子类

实现购票逻辑接口

 /**
  * 购票流程过滤器之验证参数必填
  *
  */
 @Component
 public class TrainPurchaseTicketParamNotNullChainHandler implements TrainPurchaseTicketChainFilter<PurchaseTicketReqDTO> {
 ​
     @Override
     public void handler(PurchaseTicketReqDTO requestParam) {
         // ......
     }
 ​
     @Override
     public int getOrder() {
         return 0;
     }
 }
 ​
 /**
  * 购票流程过滤器之验证参数是否有效
  * 验证参数有效这个流程会大量交互缓存,为了优化性能需要使用 Lua。为了方便大家理解流程,这里使用多次调用缓存
  *
  */
 @Component
 @RequiredArgsConstructor
 public class TrainPurchaseTicketParamVerifyChainHandler implements TrainPurchaseTicketChainFilter<PurchaseTicketReqDTO> {
 ​
     private final TrainMapper trainMapper;
     private final TrainStationMapper trainStationMapper;
     private final DistributedCache distributedCache;
 ​
     @Override
     public void handler(PurchaseTicketReqDTO requestParam) {
         // ......
     }
 ​
     @Override
     public int getOrder() {
         return 10;
     }
 }
 ​
 /**
  * 购票流程过滤器之验证列车站点库存是否充足
  *
  */
 @Component
 @RequiredArgsConstructor
 public class TrainPurchaseTicketParamStockChainHandler implements TrainPurchaseTicketChainFilter<PurchaseTicketReqDTO> {
 ​
     private final SeatMarginCacheLoader seatMarginCacheLoader;
     private final DistributedCache distributedCache;
 ​
     @Override
     public void handler(PurchaseTicketReqDTO requestParam) {
         // ......
     }
 ​
     @Override
     public int getOrder() {
         return 20;
     }
 }
 ​
 /**
  * 购票流程过滤器之验证乘客是否重复购买
  *
  */
 @Component
 @RequiredArgsConstructor
 public class TrainPurchaseTicketRepeatChainHandler implements TrainPurchaseTicketChainFilter<PurchaseTicketReqDTO> {
 ​
     @Override
     public void handler(PurchaseTicketReqDTO requestParam) {
         // ......
     }
 ​
     @Override
     public int getOrder() {
         return 30;
     }
 }

总结

可以看到,最终的实现购票逻辑的接口需要继承TrainPurchaseTicketChainFilter购买车票过滤器接口、

TrainPurchaseTicketChainFilter则需要继承AbstractChainHandler接口,是一个层层继承的关系

由抽象到具体一步步细分,从而来实现业务逻辑,实际使用中可以直接把对应的请求参数丢给责任链处理器去完成

责任链模式相对来说不是难理解,只要稍微用心整理一下就会豁然开朗

以上就是关于责任链模式案例详解相关的全部内容,希望对你有帮助。欢迎持续关注潘子夜个人博客(www.panziye.com),学习愉快哦!

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/10050.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号