设计模式:Chain Of Responsibility
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. 参考文章
- 《设计模式_可复用面向对象软件的基础》,
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,转载请注明作者及原网址。
抱歉,暂停评论。