一、概念以及背景
责任链模式(Chain of Responsibility Pattern):责任链模式是一种创建处理对象序列(比如操作序列)的通用方案。一个处理对象可能需要在完成一些工作之后,将结果传递给另一个对象,这个对象接着做一些工作,再转交给下一个处理对象,以此类推。
简而言之,待处理的对象,需要经过好几个步骤的处理,形成一条链,一个步骤处理完之后,接着往下一个步骤继续处理。
本文涉及的代码在github上,点击 链接 可查看源码。
本文会用两种方式来实现责任链模式,第二种是用lambda表达式的方式来实现,参数行为化的方式实现。
本文所使用的场景如下:处理一封信,首先对会信的头部进行处理,然后会检查这份信的拼写有无错误,有的话把错误的单词修改过来,最后会对信的结尾进行处理。这样一来处理一封信就形成了一条链,先处理……,再处理……,最后处理……。
二、责任链模式
基于上面提到的场景,UML类图如下,责任链模式之所以能形成链,其核心是有一个抽象处理类,该抽象处理类会有一个字段(抽象处理者)被用来记录后续对象,即记录执行处理某个步骤的对象。然后该抽象处理类还有一个抽象方法,即handleWork抽象方法,每个处理步骤(链节点)都会实现该抽象方法,作为该步骤的处理逻辑,当然处理完之后还需要丢给下一个链节点处理。
- Handler抽象类,即抽象处理类,含有一个字段是抽象处理者successor,当然也有setSuccessor方法,用来设置下一个处理者,即本步骤/链节点处理完之后,