0%

责任链模式

责任链模式

责任链模式(Chain of Responsibility Pattern)使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,为请求创建了一个接收者对象的链,沿着这条链传递该请求,直到有一个对象处理它为止。这种模式给予请求的类型,对请求的发送者和接收者进行解耦,其本质是分离职责,动态组合

核心概念

  • Handler 定义职责的接口
  • ConcreteHandler 实现职责的类
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
public abstract class Handler {
protected Handler successor;

public void setSuccessor(Handler successor) {
this.successor = successor;
}

// 处理请求
public abstract void handleRequest();

}

public class ConcreteHandler extends Handler{
@Override
public void handleRequest() {

// 处理自己的职责,处理完之后继续传递
System.out.println("aaa");

if(successor != null){
// 继续传递
successor.handleRequest();
}

}
}

优缺点

优点

  • 请求者和接收者松散耦合
  • 动态组合职责

缺点

  • 产生很多细粒度的对象
  • 不一定能被处理

使用场景

  • 多个对象可以处理同一个请求,但是具体由哪个对象处理该请求,是运行时动态决定的
  • 想在不明确指定接收者的情况下,向多个对象中的其中一个提交请求
  • 想要动态指定处理一个请求的对象集合

如servlet中的过滤器链FilterChain

欢迎关注我的其它发布渠道