一、责任链模式概述
职责链模式的英文翻译是 Chain Of Responsibility Design Pattern。在 GoF 的《设计模式》中,它是这么定义的:将请求的发送和接收解耦,让多个接收对象都有机会处理这个请求。将这些接收对象串成一条链,并沿着这条链传递这个请求,直到链上的某个接收对象能够处理它为止。
其本质就是将多个处理器作为一个链条,统一处理一个请求。
二、责任链的实现方式
2.1 链表
链表的实现方式比较复杂。如图:
将传入的第一个HandlerA
作为头,然后内部的set
方法为下一个的HandlerB
,尾指向HandlerB
,当继续有处理器add
的时候,将其添加到HandlerB
的set
方法中,然后尾指向HandlerC
,以此类推。
我们设计的责任链HandlerChain
的执行方法,将会先执行A,如果执行失败,则会调用里面的B,如果B再失败,调用C,如链条一样传动调用。
首先定义一个抽象处理器类,并使用模板设计模式进行重构。
/**
* 处理器:子类去处理执行,如果处理完毕则结束;否则,交给下一个处理器执行
*/
public abstract class Handler {
/**
* 判断是否处理完毕
*/
private boolean isSuccess = false;
/**
* 注入子类处理器
*/
private Handler handler = null;
public void setHandler(Handler handler) {
this.handler = handler;
}
/**
* 【模板设计模式】提供一个共性方法,当子类执行完毕后,判断是否执行完成
* 是,结束
* 否,交给下一个处理器
*/
public void handle() {
isSuccess = doHandle(); //执行的是本Handler方法
if (!isSuccess && null != handler)