定义
使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间发生耦合。此模式将这些对象连接成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
“直到有一个对象处理它为止”是书上的表述,可能会有歧义,故作说明。
个人认为责任链可以是一个对象处理,也可以是多个对象处理。
- 比如不确定请求具体由哪个对象处理,则可以构建责任链从头到尾依次识别该类是否能响应,若已经响应了,则中断请求的继续传递,这就是一个对象处理。
- 比如一个请求需要经过层层处理,则可以通过责任链构建这种层次关系,当前类处理完后传递给下一个处理类处理,这就是多个对象处理。
如何实现
第一步:责任链上处理类定义统一的处理接口,并在抽象层或基类中通过通用的nextResponder方法设置并持有下一个处理类;
在通用处理接口中先调用当前的处理类处理,再调用nextResponder处理;
第二步:客户端调用链的初始化方法,初始化完整链上的处理类,该初始化过程会将链上处理类的方法串联起来;
第三步:客户端将待处理的类传递给责任链头的处理类去处理即可;
网友评论