什么是责任链模式?
责任链模式是一种行为设计模式,它允许你将请求沿着处理者链进行传递,直到有一个处理者处理请求。在实际应用中,责任链模式常用于解耦发送者和接收者,使得请求可以按照一定的规则被多个处理者依次处理。
案例:订单创建流程
我们现在有如下图一样的一个创建订单的业务流程处理,我们选择使用责任链模式去实现。
验证规则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验权和基本验证。
用户登录系统: 验证规则包括用户名验证、密码验证和验证码验证。
商品发布系统: 验证规则包括商品信息验证、价格验证和图片验证。
通过使用责任链模式,我们可以轻松扩展和维护业务逻辑,使得系统更加灵活和高效。
来源:
互联网
本文观点不代表源码解析立场,不承担法律责任,文章及观点也不构成任何投资意见。
评论列表