龙空技术网

设计模式-责任链模式使用教程

小小程序员 48

前言:

现时同学们对“责任链实现”大致比较关怀,兄弟们都想要剖析一些“责任链实现”的相关内容。那么小编也在网摘上网罗了一些关于“责任链实现””的相关文章,希望朋友们能喜欢,你们快快来了解一下吧!

责任链模式(Chain of Responsibility Pattern)允许多个对象有机会处理请求,或者将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。使用责任链模式可以避免请求的发送者和接收者之间的耦合,并能动态地重新组织和分配责任。

以下是责任链模式在Java中的一个简单示例:

步骤 1: 创建抽象处理者(Handler)

定义一个处理请求的接口,并在其中声明一个方法来传递请求,以及一个设置链上下一个处理者的方法。

1abstract class Handler {2    protected Handler successor;34    public void setSuccessor(Handler successor) {5        this.successor = successor;6    }78    public abstract void handleRequest(String request);9}
步骤 2: 创建具体处理者(ConcreteHandler)

实现抽象处理者的具体类。这些类将处理它们负责的请求,如果它们不能处理该请求,它们将传递给链上的下一个处理者。

1class ConcreteHandlerA extends Handler {2    @Override3    public void handleRequest(String request) {4        if ("A".equals(request)) {5            System.out.println("ConcreteHandlerA handled the request.");6        } else if (successor != null) {7            successor.handleRequest(request);8        }9    }10}1112class ConcreteHandlerB extends Handler {13    @Override14    public void handleRequest(String request) {15        if ("B".equals(request)) {16            System.out.println("ConcreteHandlerB handled the request.");17        } else if (successor != null) {18            successor.handleRequest(request);19        }20    }21}2223class DefaultHandler extends Handler {24    @Override25    public void handleRequest(String request) {26        System.out.println("DefaultHandler says 'I'll handle it.'");27    }28}
步骤 3: 设置责任链

创建处理者对象,并设置它们的顺序,形成责任链。

1public class ChainOfResponsibilityDemo {2    public static void main(String[] args) {3        // 创建责任链上的对象4        Handler handlerA = new ConcreteHandlerA();5        Handler handlerB = new ConcreteHandlerB();6        Handler defaultHandler = new DefaultHandler();78        // 设置责任链的顺序9        handlerA.setSuccessor(handlerB);10        handlerB.setSuccessor(defaultHandler);1112        // 发送请求13        handlerA.handleRequest("A");14        handlerA.handleRequest("B");15        handlerA.handleRequest("C");16    }17}

在这个例子中,我们创建了一个请求处理的责任链,链中有两个具体的处理者 ConcreteHandlerA 和 ConcreteHandlerB,以及一个默认处理者 DefaultHandler。我们设置了处理者的顺序,然后发送了三个请求。每个请求如果在当前处理者无法处理,则会被传递到链的下一个处理者。

责任链模式非常适合于处理类似过滤器、拦截器这样的场景,其中一个请求可能需要经过多个处理阶段,而每个阶段的处理者可以根据请求类型或内容独立变化。

标签: #责任链实现 #责任链模式 #责任链模式是关系模式吗