责任链模式是一种行为型设计模式,用于构建对象链,每个对象都有机会处理请求,或者将请求传递给链中的下一个对象。这种模式将请求的发送者和接收者解耦,并允许多个对象都有机会处理请求。

在责任链模式中,有三个主要角色:

1. 抽象处理者(Handler): 定义了处理请求的接口,通常包含一个指向下一个处理者的引用。
public abstract class Handler {
    protected Handler successor; // 下一个处理者

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

    public abstract void handleRequest(int request);
}

2. 具体处理者(ConcreteHandler): 实现了抽象处理者接口,负责处理请求。如果自己不能处理,则将请求传递给下一个处理者。
public class ConcreteHandler1 extends Handler {
    @Override
    public void handleRequest(int request) {
        if (request <= 10) {
            System.out.println("ConcreteHandler1 handles the request: " + request);
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

public class ConcreteHandler2 extends Handler {
    @Override
    public void handleRequest(int request) {
        if (request > 10 && request <= 20) {
            System.out.println("ConcreteHandler2 handles the request: " + request);
        } else if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

3. 客户端代码: 创建责任链,并将请求发送给链的第一个处理者。
public class Client {
    public static void main(String[] args) {
        // 构建责任链
        Handler handler1 = new ConcreteHandler1();
        Handler handler2 = new ConcreteHandler2();
        handler1.setSuccessor(handler2);

        // 发送请求
        handler1.handleRequest(5);
        handler1.handleRequest(15);
        handler1.handleRequest(25);
    }
}

在这个例子中,客户端创建了两个具体处理者,并将它们构建成一个责任链。客户端通过调用责任链的第一个处理者来发送请求。每个处理者根据自己的条件判断是否能够处理请求,如果能够处理,则进行处理;否则,将请求传递给下一个处理者。这样,请求就会在责任链上传递,直到有一个处理者能够处理它。责任链模式使得请求发送者无需知道具体的处理者是谁,从而实现了请求发送者和处理者的解耦。


转载请注明出处:http://www.zyzy.cn/article/detail/13950/设计模式