目录
[显示]

1.摘要

责任链模式解除了请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

2. 针对问题

在看电视新闻的时候经常会有这种情况:某一个记者去采访某部门,接待人员告诉他“这件事我处理不了,得找领导”
领导告诉他:“这件事不归我们管,得找xx部”,然后把电话转到xx部。
xx部的接待告诉他:“这件事我们也没辙,得找yy部”,然后把电话转到yy部。
在这种情况下,每一个部门都有可能处理这件事,但是记者也并不知道最终谁会出面处理,也不知道能不能处理。
把记着比作调用者,把接电话的每个人比作处理类,就形成了责任链模式。

3. 介绍

为解除请求的发送者和接收者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。

4. 实现

责任链模式的静态图如下:

每一个潜在的调用处理者都需要继承Handler类。Handler类需要做两件事情:
1、声明HandleRequest方法。
2、保存责任链中的下一个节点successor
3、(可选)提供HandleRequest的默认实现:successor.HandleRequest();
子类继承Handler后,在HandleRequest方法中增加处理逻辑,如果本类可以处理,那么处理完成后返回,如果不能处理,将请求转发到下一个节点,调用过程如下:

5. 特点

1、某个消息的具体处理类是在运行时确定的。
2、责任链模式不能保证消息得到处理,为解决这个问题可以在链末端或Handler类中增加一个默认处理逻辑。
3、可以与Composite模式共同使用,此时parent等同于successor。
 

6. 相关文章

设计模式总结

7. 参考文章

  1. 《设计模式_可复用面向对象软件的基础》,