Java 设计模式:责任链模式
责任链模式是一种行为型设计模式,它通过将请求对象沿着一条链传递,直到被某个处理者处理完成。责任链模式可以减少请求的发送者和接收者之间的耦合,同时使得请求的处理者可以自由制定处理,增加系统的灵活性。
流程概述
以下是实现责任链模式的基本流程表:
步骤 | 描述 |
---|---|
1 | 定义处理者接口 |
2 | 创建具体处理者 |
3 | 设置链路 |
4 | 发起请求 |
1. 定义处理者接口
我们首先要定义一个处理者接口,所有具体处理者都需要实现这个接口。
// Handler接口
public abstract class Handler {
protected Handler nextHandler; // 下一个处理者
// 设置下一个处理者
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
// 处理请求的方法
public abstract void handleRequest(int request);
}
2. 创建具体处理者
接下来,创建几个具体处理者,这些处理者实现了预先定义的接口,并根据请求的条件执行处理。
// 处理请求的具体实现1
public class ConcreteHandlerA extends Handler {
@Override
public void handleRequest(int request) {
if (request < 10) {
System.out.println("Handler A handling request: " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 处理请求的具体实现2
public class ConcreteHandlerB extends Handler {
@Override
public void handleRequest(int request) {
if (request >= 10 && request < 20) {
System.out.println("Handler B handling request: " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 处理请求的具体实现3
public class ConcreteHandlerC extends Handler {
@Override
public void handleRequest(int request) {
if (request >= 20) {
System.out.println("Handler C handling request: " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
3. 设置链路
现在,我们需要创建一个“客户端”,来设置和启动责任链。
public class Client {
public static void main(String[] args) {
// 创建处理者
Handler handlerA = new ConcreteHandlerA();
Handler handlerB = new ConcreteHandlerB();
Handler handlerC = new ConcreteHandlerC();
// 设置责任链
handlerA.setNextHandler(handlerB);
handlerB.setNextHandler(handlerC);
// 发送请求
handlerA.handleRequest(5); // 输出: Handler A handling request: 5
handlerA.handleRequest(15); // 输出: Handler B handling request: 15
handlerA.handleRequest(25); // 输出: Handler C handling request: 25
}
}
4. 发起请求
在 Client
类的 main
方法中,我们可以用不同的请求值来验证责任链的效果。不同的处理者会根据请求的大小进行相应的处理。
类图
以下是实现责任链模式的类图:
classDiagram
class Handler {
+nextHandler: Handler
+setNextHandler(nextHandler: Handler): void
+handleRequest(request: int): void
}
class ConcreteHandlerA {
+handleRequest(request: int): void
}
class ConcreteHandlerB {
+handleRequest(request: int): void
}
class ConcreteHandlerC {
+handleRequest(request: int): void
}
Handler <|-- ConcreteHandlerA
Handler <|-- ConcreteHandlerB
Handler <|-- ConcreteHandlerC
流程图
以下是实施责任链模式的流程图:
flowchart TD
A[定义处理者接口] --> B[创建具体处理者]
B --> C[设置链路]
C --> D[发起请求]
结尾
责任链模式是一种灵活且易于扩展的设计模式,它能够将请求的处理责任分派给多个处理者,并不需要客户了解处理者的具体实现。这使得系统更加模块化,降低了耦合性。通过本文的实施步骤和代码示例,相信你可以较好地理解责任链模式的基本概念和实现方法。巩固理解后,你可以进一步探索如何在实际项目中运用这一模式,以提升代码的可维护性和可扩展性。