巧妙利用 SpringBoot 应用责任连模式,让编程事半功倍!

一、什么是责任链模式

责任链模式(Chain of Responsibility Pattern),顾名思义,为请求者和接受者之间创建一条对象处理链路,避免请求发送者与接收者耦合在一起! 

责任链模式,是一种实用性非常强的设计模式,比较典型的应用场景有:

1、Apache Tomcat 对 Encoding 编码处理的处理

2、SpringBoot ⾥⾯的拦截器、过滤器链

3、Netty 中的处理链

4、支付风控的机制

5、⽇志处理级别

尤其是当程序的处理流程很长的时候,采用责任链设计模式,不仅实现优雅,而且易复用可扩展!

二、代码实践

在 SpringBoot 中,责任链模式的实践方式有好几种,今天我们主要抽三种实践方式给大家介绍。

我们以某下单流程为例,将其切成多个独立检查逻辑,可能会经过的数据验证处理流程如下:

2.1 方式一

首先,我们定义一个简易版的下单对象OrderAddContext

import lombok.Data;

@Data
public class OrderAddContext {

    // 请求唯一序列ID
    private String seqId;

    // 用户ID
    private String userId;

    // 产品skuId
    private Long skuId;

    // 下单数量
    private Integer amount;

    // 用户收货地址ID
    private String userAddressId;
}

然后,我们定义一个数据处理接口OrderHandleIntercept,用于标准化执行!

import com.bc.work.dto.OrderAddContext;

public interface OrderHandleIntercept {

    /**
     * 指定执行顺序
     */
    int sort();

    /**
     * 对参数进行处理
     */
    OrderAddContext handle(OrderAddContext context);
}

接着我们分别创建三个不同的接口实现类,并指定执行顺序,内容如下:

RepeatOrderHandleInterceptService:用于重复下单的逻辑验证
ValidOrderHandleInterceptService:用于验证请求参数是否合法
BankOrderHandleInterceptService:用于检查客户账户余额是否充足

import com.bc.work.dto.OrderAddContext;
import com.bc.work.service.OrderHandleIntercept;
import org.springframework.stereotype.Component;

@Component
public class RepeatOrderHandleInterceptService implements OrderHandleIntercept {

    @Override
    public int sort() {
        //用于重复下单的逻辑验证,在执行顺序为1
        return 1;
    }

    @Override
    public OrderAddContext handle(OrderAddContext context) {
        System.out.println("通过seqId,检查客户是否重复下单");
        return context;
    }
}
import com.bc.work.dto.OrderAddContext;
import com.bc.work.service.OrderHandleIntercept;
import org.springframework.stereotype.Component;

@Component
public class ValidOrderHandleInterceptService implements OrderHandleIntercept {

    @Override
    public int sort() {
        //用于验证请求参数是否合法,执行顺序为2
        return 2;
    }

    @Override
    public OrderAddContext handle(OrderAddContext context) {
      
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值