Skip to content

责任链模式

字数: 0 字 时长: 0 分钟

简介

责任链模式(Chain of Responsibility Pattern)的核心思想是:将多个处理请求的对象连接成一个链,每个对象在链上依次处理请求,直到有对象处理完请求为止

UML 类图

chain.webp

  • 抽象处理者(Handler):声明一个处理请求的接口,通常包括一个方法 handleRequest(),并且持有对下一个处理者的引用
  • 具体处理者(ConcreteHandler):具体处理者,如果当前对象能处理请求就处理,否则将请求转发给下一个处理者

实现示例

以“订单优惠处理”为例:

java
// 订单类
class Order {
    private double price;
    private boolean isVip;
}

// 1. 抽象处理者
interface DiscountHandler {
    void setNextHandler(DiscountHandler handler);
    void handle(Order order);
}

// 2. 具体处理者
// 满减
class FullDiscountHandler implements DiscountHandler {
    private VipDiscountHandler nextHandler;
    @Override
    public void setNextHandler(DiscountHandler handler) {
        this.nextHandler = handler;
    }
    @Override
    public void handle(Order order) {
        if (order.getTotalPrice() >= 100) {
            System.out.println("满 100 减 10");
        }
        if (nextHandler != null) {
            nextHandler.handle(order);
        }
    }
}
class VipDiscountHandler implements DiscountHandler {
    private CashDiscountHandler nextHandler;
    @Override
    public void setNextHandler(DiscountHandler handler) {
        this.nextHandler = handler;
    }
    @Override
    public void handle(Order order) {
        if (order.isVip) {
            System.out.println("会员 8.8 折");
        }
        if (nextHandler != null) {
            nextHandler.handle(order);
        }
    }
}

// 3. 调用示例
public static void main(String[] args) {
    Order order = new Order();
    order.setPrice(120);
    order.setVip(true);
    // 创建处理器
    DiscountHandler fullDiscountHandler = new FullDiscountHandler();
    DiscountHandler vipDiscountHandler = new VipDiscountHandler();
    // 设置责任链
    fullDiscountHandler.setNextHandler(vipDiscountHandler);
    // 开始处理
    fullDiscountHandler.handle(order);
}