1. 基本概念

责任链模式是一种行为型设计模式,它允许你构建一个对象链,让请求从链的一端进入,然后沿着链上的对象依次处理,直到链上的某个对象能够处理该请求为止。

image-20240519162244161

2. 组成结构

责任链模式包括以下几个基本结构:

  1. 处理者Handler :定义一个处理请求的接口,包含一个处理请求的抽象方法和一个指向下一个处理者的链接。
  2. 具体处理者ConcreteHandler: 实现处理请求的方法,并判断能否处理请求,如果能够处理请求则进行处理,否则将请求传递给下一个处理者。
  3. 客户端:创建并组装处理者对象链,并将请求发送到链上的第一个处理者。

image-20240519162737332

3. 简易实现

  1. 处理者:定义处理请求的接口
1
2
3
4
5
6
interface Handler {
// 处理请求的方法
void handleRequest(double amount);
// 设置下一个处理者的方法
void setNextHandler(Handler nextHandler);
}
  1. 具体处理者:实现处理请求
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
class ConcreteHandler implements Handler {
private Handler nextHandler;

@Override
public void handleRequest(Request request) {
// 根据具体情况处理请求,如果无法处理则交给下一个处理者
if (canHandle(request)) {
// 处理请求的逻辑
} else if (nextHandler != null) {
// 交给下一个处理者处理
nextHandler.handleRequest(request);
} else {
// 无法处理请求的逻辑
}
}

@Override
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}

// 具体处理者自己的判断条件
private boolean canHandle(Request request) {
// 根据具体情况判断是否能够处理请求
return /* 判断条件 */;
}
}
  1. 客户端创建并组装处理者对象链,将请求发送给链上第一个处理者
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
public class Main {
public static void main(String[] args) {
// 创建处理者实例
Handler handler1 = new ConcreteHandler();
Handler handler2 = new ConcreteHandler();
// ...

// 构建责任链
handler1.setNextHandler(handler2);
// ...

// 发送请求
Request request = new Request(/* 请求参数 */);
handler1.handleRequest(request);
}
}

4. 使用场景

责任链模式具有下面几个优点:

  • 降低耦合度:将请求的发送者和接收者解耦,每个具体处理者都只负责处理与自己相关的请求,客户端不需要知道具体是哪个处理者处理请求。
  • 增强灵活性:可以动态地添加或删除处理者,改变处理者之间的顺序以满足不同需求。

但是由于一个请求可能会经过多个处理者,这可能会导致一些性能问题,并且如果整个链上也没有合适的处理者来处理请求,就会导致请求无法被处理。

责任链模式是设计模式中简单且常见的设计模式,在日常中也会经常使用到,比如Java开发中过滤器的链式处理,以及Spring框架中的拦截器,都组装成一个处理链对请求、响应进行处理。


本站由 卡卡龙 使用 Stellar 1.29.1主题创建

本站访问量 次. 本文阅读量 次.