责任链模式(Chain of Responsibility Pattern)是一种行为型设计模式,它允许多个对象来处理同一个请求,从而避免请求的发送者和接收者之间的耦合关系。在责任链模式中,请求沿着一条链传递,直到有一个对象处理它为止。
在责任链模式中,通常有一个抽象处理者(Handler)类,它定义了一个处理请求的接口,并且包含一个指向下一个处理者的引用。每个具体处理者(ConcreteHandler)类实现了处理请求的方法,并且决定是否将请求传递给下一个处理者。文章源自新逸网络-https://www.xinac.net/9361.html
下面是一个简单的 Java 实现责任链模式的示例:文章源自新逸网络-https://www.xinac.net/9361.html
// 抽象处理者 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 { public void handleRequest(int request) { if (request >= 0 && request < 10) { System.out.println("ConcreteHandlerA 处理请求 " + request); } else if (successor != null) { successor.handleRequest(request); } } } // 具体处理者B class ConcreteHandlerB extends Handler { public void handleRequest(int request) { if (request >= 10 && request < 20) { System.out.println("ConcreteHandlerB 处理请求 " + request); } else if (successor != null) { successor.handleRequest(request); } } } // 具体处理者C class ConcreteHandlerC extends Handler { public void handleRequest(int request) { if (request >= 20 && request < 30) { System.out.println("ConcreteHandlerC 处理请求 " + 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(); Handler handlerC = new ConcreteHandlerC(); handlerA.setSuccessor(handlerB); handlerB.setSuccessor(handlerC); int[] requests = {5, 15, 25, 35}; for (int request : requests) { handlerA.handleRequest(request); } } }
在上面的示例中,抽象处理者类定义了一个 `setSuccessor()` 方法来设置后继处理者,以及一个抽象的 `handleRequest()` 方法来处理请求。具体处理者类实现了 `handleRequest()` 方法,并且判断当前处理者是否能够处理该请求,如果不能则将请求传递给后继处理者。客户端通过链式设置处理者的后继关系,并且将请求发送给第一个处理者来开始处理请求。文章源自新逸网络-https://www.xinac.net/9361.html
责任链模式的优点是将请求和处理分离,降低了系统的耦合度,同时增加了系统的灵活性和可扩展性。但是需要注意的是,由于每个请求都需要在责任链中传递,因此会有一定的性能损失。文章源自新逸网络-https://www.xinac.net/9361.html 文章源自新逸网络-https://www.xinac.net/9361.html
评论