一、职责链模式概述
责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链。请求在这个链上传递,直到链上的某一个对象决定处理此请求。发出这个请求的客户端并不知道链上的哪一个对象最终处理这个请求,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任。
职责链模式适用于:1、有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定;2、你想在不明确指定接受者的情况下,向多个对象中的一个提交一个请求;3、可处理一个请求的对象集合应该动态指定。
职责链模式的类图如下图所示:
职责链模式适用于:1、有多个对象可以处理一个请求,哪个对象处理该请求运行时刻自动确定;2、你想在不明确指定接受者的情况下,向多个对象中的一个提交一个请求;3、可处理一个请求的对象集合应该动态指定。
职责链模式的类图如下图所示:

抽象处理者(Handler)角色:定义出一个处理请求的接口。如果需要,接口可以定义出一个方法,以设定和返回对下家的引用。这个角色通常由一个抽象类或接口实现。
具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
一个典型的对象结构如下图所示:
具体处理者(ConcreteHandler)角色:具体处理者接到请求后,可以选择将请求处理掉,或者将请求传给下家。由于具体处理者持有对下家的引用,因此,如果需要,具体处理者可以访问下家。
一个典型的对象结构如下图所示:

二、JDK中的职责链模式
JDK中用到职责链模式的地方是java的异常捕获机制,当方法的运行出现异常时,首先将这个异常传入本方法的catch块,如果搞不了(throw了)就传入调用这个方法的方法的catch块,如果还搞不了就传入调用调用这个方法的方法的方法的catch块……以此类推,这个方法的调用链中的每一个方法都有机会处理这个异常,沿着这条调用链传递这个异常,直到有一个方法能够处理这个异常为止。
三、关于职责链模式的思考
职责链模式有以下优缺点:1、降低耦合度;2、增强了给对象指派职责的灵活性;3、不保证消息会被接收。