模式介绍

责任链模式是一种行为型设计模式,它允许您将请求沿着处理者链进行传递。收到请求后,每个处理者均可对请求进行处理,或将其传递给链上的下一个处理者。

使用场景

  • 当程序需要使用不同方式处理不同种类的请求,而且请求类型和顺序预先未知时
  • 当必须按特定顺序执行多个处理者时
  • 当处理者的集合和顺序必须动态改变时

代码示例

// 处理者接口
public abstract class Handler {
    protected Handler successor;

    public void setSuccessor(Handler successor) {
        this.successor = successor;
    }

    public abstract void handleRequest(Request request);
}

// 具体处理者
public class ConcreteHandlerA extends Handler {
    @Override
    public void handleRequest(Request request) {
        if (request.getType() == RequestType.TYPE_A) {
            System.out.println("处理者A处理请求");
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

public class ConcreteHandlerB extends Handler {
    @Override
    public void handleRequest(Request request) {
        if (request.getType() == RequestType.TYPE_B) {
            System.out.println("处理者B处理请求");
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

优缺点

优点

  • 降低了请求发送者和接收者的耦合度
  • 增强了系统的可扩展性
  • 简化了对象之间的连接

缺点

  • 请求可能得不到处理
  • 系统性能会受到影响
  • 调试不方便