责任链模式

责任链模式即使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这个对象连成一条链并沿着这条链传递该请求,直到有一个对象处理它为止,这就是一种责任链。此外,责任链模式也可以由多个处理类处理同一个请求,这也是一种责任链。

责任链模式示例代码

下面代码实现了一个简单的责任链模式。

Handler.java

public abstract class Handler {
    protected Handler successor;

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

    public abstract void handleRequest(int request);
}

ConcreteHandlerA.java

public class ConcreteHandlerA extends Handler {
    @Override
    public void handleRequest(int request) {
        System.out.println("A进行处理");
        if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

ConcreteHandlerB.java

public class ConcreteHandlerB extends Handler {
    @Override
    public void handleRequest(int request) {
        System.out.println("B进行处理");
        if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

ConcreteHandlerC.java

public class ConcreteHandlerC extends Handler {
    @Override
    public void handleRequest(int request) {
        System.out.println("C进行处理");
        if (successor != null) {
            successor.handleRequest(request);
        }
    }
}

Main.java

public class Main {
    public static void main(String[] args) {
        Handler handlerA = new ConcreteHandlerA();
        Handler handlerB = new ConcreteHandlerB();
        Handler handlerC = new ConcreteHandlerC();

        handlerA.setSuccessor(handlerB);
        handlerB.setSuccessor(handlerC);

        handlerA.handleRequest(1);
    }
}

上述代码中,我们把一个int类型的数字作为请求,在A、B、C处理器中采用了链式处理。

代码运行结果如下图。

作者:Gacfox
版权声明:本网站为非盈利性质,文章如非特殊说明均为原创,版权遵循知识共享协议CC BY-NC-ND 4.0进行授权,转载必须署名,禁止用于商业目的或演绎修改后转载。