从零开始玩转SpringBoot和责任链模式

什么是责任链模式?

责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者处理请求。在实际应用中,责任链模式常用于解耦发送者和接收者,使得请求可以按照一定的规则被多个处理者依次处理。

案例:订单创建流程

我们现在有如下图一样的一个创建订单的业务流程处理,我们选择使用责任链模式去实现。

  • 验证规则1:如果订单总金额大于1000,则需要进行支付验证。

  • 验证规则2:如果订单中包含VIP商品,则需要进行VIP验权。

  • 验证规则3:最后,对于所有订单,都需要进行基本的验证(例如,订单信息格式正确等)。

使用责任链模式实现

首先,我们定义一个抽象处理类VerifyHandler:

public abstract class VerifyHandler {
    protected boolean check(VerifyRequest request) {
        return true;
    }
}

然后,我们分别创建三种具体的验证规则:

// 支付验证
public class PayVerifyHandler extends VerifyHandler {
    @Override
    public boolean check(VerifyRequest request) {
        // TODO: 实现支付验证逻辑
        return request.getSum() > 1000;
    }
}

// VIP验权
public class VipVerifyHandler extends VerifyHandler {
    @Override
    public boolean check(VerifyRequest request) {
        // TODO: 实现VIP验权逻辑
        return request.containsVip();
    }
}

// 基本验证
public class BasicVerifyHandler extends VerifyHandler {
    @Override
    public boolean check(VerifyRequest request) {
        // TODO: 实现基本验证逻辑
        return true;
    }
}

接下来,我们定义一个VerifyChain类来处理请求:


// 责任链处理器
public class VerifyChain {
    private List<VerifyHandler> handlers = new ArrayList<>();

    public void addHandler(VerifyHandler handler) {
        this.handlers.add(handler);
    }

    // 处理请求
    public boolean verify(VerifyRequest request) {
        for (VerifyHandler handler : handlers) {
            if (!handler.check(request)) {
                return false;
            }
        }
        return true;
    }
}

最后,我们使用自定义注解@OrderCheck来标记需要进行验证的请求:

// 自定义注解
@Target(ElementType.PARAMETER)
@Retention(RetentionPolicy.RUNTIME)
public @interface OrderCheck {
}

使用示例

// 使用示例
@RestController
@RequestMapping("/order")
public class OrderController {
    // 责任链处理器
    private final VerifyChain verifyChain = new VerifyChain();

    public OrderController() {
        // 添加验证规则
        this.verifyChain.addHandler(new PayVerifyHandler());
        this.verifyChain.addHandler(new VipVerifyHandler());
        this.verifyChain.addHandler(new BasicVerifyHandler());
    }

    @PostMapping("/create")
    @OrderCheck
    public String createOrder(@Valid OrderRequest request) {
        // 处理请求
        if (this.verifyChain.verify(request)) {
            return "创建订单成功";
        } else {
            return "创建订单失败";
        }
    }
}

源码解析

责任链模式将请求沿着处理者链进行传递,直到有一个处理者处理请求。这种设计使得系统更加灵活和扩展性强。

在这个案例中,我们定义了三个具体的验证规则,并使用VerifyChain类来处理请求。每个验证规则负责检查订单中的信息,并返回是否通过验证结果。如果所有验证规则都通过,则表示创建订单成功,否则表示失败。

自定义注解@OrderCheck用于标记需要进行验证的请求,这样我们可以在控制器中使用这个注解来指定需要进行验证的方法。

应用案例

责任链模式广泛应用于各种业务系统中,例如:

  • 订单管理系统: 验证规则包括支付验证、VIP验权和基本验证。

  • 用户登录系统: 验证规则包括用户名验证、密码验证和验证码验证。

  • 商品发布系统: 验证规则包括商品信息验证、价格验证和图片验证。

通过使用责任链模式,我们可以轻松扩展和维护业务逻辑,使得系统更加灵活和高效。


来源: 互联网
本文观点不代表源码解析立场,不承担法律责任,文章及观点也不构成任何投资意见。

赞 ()

相关推荐

发表回复

评论列表

点击查看更多

    联系我们

    在线咨询: QQ交谈

    微信:13450247865

    邮件:451255340#qq.com

    工作时间:周一至周五,9:30-18:30,节假日休息

    微信