设计模式 | 责任链模式

82 阅读1分钟

定义

使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之前的耦合,将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。

使用场景

  • 多个对象可以处理同一请求,但具体由哪个对象则在运行时决定。
  • 在请求处理者不明确的情况下,向多个对象中的一个提交一个请求。
  • 需要动态指定一组对象处理请求。

Java 代码示例

public abstract class Handler {
    // 下一节点的处理者
    protected Handler successor;

    public abstract void handleRequest(String condition);
}

public class Handler1 extends Handler {
    @Override
    public void handleRequest(String condition) {
        if ("handler1".equals(condition)) {
            // TODO: handle
        } else {
            successor.handleRequest(condition);
        }
    }
}

public class Handler2 extends Handler {
    @Override
    public void handleRequest(String condition) {
        if ("handler2".equals(condition)) {
            // TODO: handle
        } else {
            successor.handleRequest(condition);
        }
    }
}

public class Client {
    public static void main(String[] args) {
        Handler1 handler1 = new Handler1();
        Handler2 handler2 = new Handler2();
        handler1.successor = handler2;
        handler2.successor = handler1;
        handler1.handleRequest("handle2");
    }
}