本文仅供学习交流使用,侵权必删。
不作商业用途,转载请注明出处
WHAT 什么是职责链模式
职责链模式(Chain Of Responsibility Design Pattern),将处理请求的功能代码进行解耦,让每个处理请求的对象串成一条链,并顺着这条职责链传递请求,直到某个特定条件判定无需再往下传递为止。
很多开源框架中都有用到职责链模式,如servlet filter、spring interceptor和mybatis plugin等等。

WHY 为什么使用职责链模式
优点
- 针对请求处理的代码进行解耦,让每个处理类处理特定的业务逻辑,符合单一职责原则
- 如果业务发生变更需要添加新的处理逻辑,只需往链上添加新的处理器,无需修改原来的处理器代码,符合开闭原则
缺点
- 处理器设置不当,会形成一个闭环。
HOW 职责链模式的实现(JAVA)
- 处理器抽象类
public abstract class Handler {
protected Handler successorHandler;
public final void handle() {
boolean successor = doHandle();
if (successor && successorHandler != null) {
successorHandler.handle();
}
}
public abstract boolean doHandle();
public void setSuccessorHandler(Handler successorHandler) {
this.successorHandler = successorHandler;
}
}
- 处理链对象
public class HanderChain {
private Handler head;
private Handler tail;
public Handler addHandler(Handler h) {
if (head == null && tail == null) {
head = h;
tail = h;
return h;
}
tail.setSuccessorHandler(h);
tail = h;
return h;
}
public void handle() {
if (head != null) {
head.handle();
}
}
}
网友评论