软件设计 责任链模式 Chain of Responsibility Pattern
作者:@kuaiquxie
作者的github:https://github.com/bitebita
本文为作者原创,如需转载,请注明出处:https://www.cnblogs.com/dzwj/p/17111689.html
责任链,即责任的链条,在生活中是很常见的。
比如在工作中提交审批,会经历责任人的层层审批,最后才会通过,这一审批流程就是责任链。
再比如,JavaWeb 中学习的 Filter 过滤器,正是采用的责任链模式,通过将请求一级一级不断向下传递,来对所需要的请求进行过滤和处理。
运用责任链模式,可以让整个流程变得更加清晰,且每个环节的调用顺序可以灵活的调整,利于维护和扩展。
代码实现:
这里以面试过程为例介绍责任链模式:
1、定义面试处理程序
/**
* 面试处理程序
*/
public abstract class Handler {
/**
* 下一轮面试
*/
protected Handler successor;
/**
* 开始下一轮面试
* @param successor 下一轮面试
* @return 面试处理程序
*/
public Handler connect(Handler successor) {
this.successor = successor;
// 这里返回后继节点,方便后面链式调用
return successor;
}
/**
* 开始面试
*/
public void handle() {
// 面试过程。由不同的子类实现具体处理过程
this.doHandle();
//责任链上如果还有后继节点,就继续向下传递
Optional.ofNullable(this.successor).ifPresent(Handler::handle);
}
/**
* 面试过程<br>
* 采用模板模式,变化的逻辑定义为抽象的,交由子类继承实现
*/
public abstract void doHandle();
}
2、定义第一轮面试
/**
* 第一轮面试
*/
public class FirstHandler extends Handler {