0
点赞
收藏
分享

微信扫一扫

Java责任链模式详解

责任链模式是一种行为设计模式,允许多个对象对一个请求进行处理,从而解耦请求的发送者和接收者。这个模式中,通常每个处理者都包含对另一个处理者的引用。如果一个处理者不能处理请求,它将该请求传递给下一个处理者,以此类推。

责任链模式的主要角色

  1. Handler(抽象处理者):定义了一个处理请求的接口。如果需要,它可以定义一个链接到下一个处理者的方法。
  2. ConcreteHandler(具体处理者):处理它负责的请求,可以访问它的后继者,如果可以处理请求就处理,否则将该请求传递给它的后继者。
  3. Client(客户类):向链上的具体处理者对象提交请求,让链去处理。

Java 实现示例

// 抽象处理者
abstract class Handler {
    protected Handler successor;

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

    public abstract void handleRequest(int request);
}

// 具体处理者A
class ConcreteHandlerA extends Handler {
    @Override
    public void handleRequest(int request) {
        if (request >= 0 && request < 10) {
            System.out.println("HandlerA处理请求" + request);
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

// 具体处理者B
class ConcreteHandlerB extends Handler {
    @Override
    public void handleRequest(int request) {
        if (request >= 10 && request < 20) {
            System.out.println("HandlerB处理请求" + request);
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

// 客户端代码
public class Client {
    public static void main(String[] args) {
        Handler handlerA = new ConcreteHandlerA();
        Handler handlerB = new ConcreteHandlerB();

        handlerA.setSuccessor(handlerB);

        for (int i = 0; i < 30; i+=5) {
            handlerA.handleRequest(i);
        }
    }
}

在上述示例中,客户端创建了两个具体处理者(ConcreteHandlerAConcreteHandlerB)。ConcreteHandlerA 可以处理0到10之间的请求,而 ConcreteHandlerB 可以处理10到20之间的请求。在客户端代码中,我们为每个请求分配了处理者,并观察到每个处理者如何处理或传递请求。

责任链模式在Java的许多框架和库中都有应用,例如Servlet的Filter链。

举报

相关推荐

0 条评论