设计模式之-行为型-责任链模式
# 概述
责任链模式是一种行为性设计模式,它使得多个对象都有机会处理请求,从而避免了请求的发送者与接收者之间的耦合。通过将请求沿着链传递,直到有一个对象处理该请求,责任链模式实现了请求的解耦和灵活的处理机制。
# 角色
责任链模式主要由以下几个部分组成:
- 处理者接口(Handler):定义了一个标准接口,包含处理请求的方法,并维护对下一个处理者的引用。
- 具体处理者(ConcreteHandler):实现处理者接口,定义处理请求的具体逻辑,并决定是否将请求传递给下一个处理者。
- 客户端(Client):负责构建责任链并发送请求。
# 使用场景
- 当有多个对象可以处理同一个请求,并且处理的顺序可能变化时。
- 当希望将请求的发送者和接收者解耦时。
- 当需要动态指定处理请求的对象时。
# 代码示例
// 处理者接口
abstract class Handler {
protected Handler nextHandler;
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void handleRequest(int request);
}
// 具体处理者A
class ConcreteHandlerA extends Handler {
@Override
public void handleRequest(int request) {
if (request < 10) {
System.out.println("Handler A handled request: " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 具体处理者B
class ConcreteHandlerB extends Handler {
@Override
public void handleRequest(int request) {
if (request < 20) {
System.out.println("Handler B handled request: " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 具体处理者C
class ConcreteHandlerC extends Handler {
@Override
public void handleRequest(int request) {
if (request < 30) {
System.out.println("Handler C handled request: " + request);
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
// 客户端代码
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 handled request: 5
handlerA.handleRequest(15); // Handler B handled request: 15
handlerA.handleRequest(25); // Handler C handled request: 25
handlerA.handleRequest(35); // No handler for request: 35
}
}
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# 总结
责任链模式通过将请求沿着链传递,提供了一种简洁灵活的请求处理机制。它实现了请求发送者与接收者之间的解耦,并允许动态的修改处理流程。在需要处理多个对象,且这些对象之间的处理顺序和逻辑可能变化的场景中,责任链模式是一种有效的解决方案。理解和掌握责任链模式对于设计高内聚、低耦合的系统具有重要意义。
最后更新时间: 2024/12/26, 17:56:54