Skip to content

责任链模式

意图

使多个对象都有机会处理请求,将这些对象连成一条链,并沿着链传递请求,直到有对象处理它为止。

类图

Java 示例

java
public class PurchaseRequest {
    public final int amount;
    public PurchaseRequest(int amount) { this.amount = amount; }
}

public abstract class Approver {
    protected Approver next;
    public Approver setNext(Approver n) { this.next = n; return n; }
    public abstract void process(PurchaseRequest req);
}

public class Manager extends Approver {
    public void process(PurchaseRequest req) {
        if (req.amount <= 1000) System.out.println("Manager ok");
        else if (next != null) next.process(req);
    }
}

public class Director extends Approver {
    public void process(PurchaseRequest req) {
        if (req.amount <= 5000) System.out.println("Director ok");
        else if (next != null) next.process(req);
    }
}

// new Manager().setNext(new Director()).process(new PurchaseRequest(3000));

Servlet Filter 链、Spring MVC HandlerInterceptor 链均为责任链。

下一节:命令模式