责任链模式(Chain of Responsibility)

Posted KbDaVinci

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了责任链模式(Chain of Responsibility)相关的知识,希望对你有一定的参考价值。

一:定义

    使多个对象都有机会处理请求,从而避免了请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这个条链传递请求,直到有对象处理它为止。

 

二:《设计模式之禅》和《Design Pattern GoF》的介绍,责任链模式是有且只有一个对象处理请求。我认为下面的例子可以理解为责任链模式的一个变种,

它也是沿着一个对象链传递请求, 但是不止一个对象最终对请求做出了响应,但是在链的前面的对象有权利选择是否继续往后传递请求。

    假设android界面的一个“按钮”目前已经获取了焦点,并注册了对按键事件的监听onKeyEventListener,同时它所在的Activity也重载了

onKeyDown 方法,此时按键事件发生的话,“按钮”首先获得处理事件的权利,它可以选择做出响应也可以选择什么都不做,然后返回一个boolean值,

如果返回true则表示事件已经被消化了,不再往下传递。如果返回false则Activity接到这个事件,然后和“按钮”一样,它做出响应后也返回一个boolean

值,如果是true则传递终止,否则继续把事件递给系统。

    android UI 框架就是这样处理按键事件的, 更多时候比这个情况的链涉及的对象还要多,但处理原则是一样,在链的前面的对象相对“权限”比较高。

以上是关于责任链模式(Chain of Responsibility)的主要内容,如果未能解决你的问题,请参考以下文章

责任链模式(Chain of Responsibility)

15-责任链(Chain of Responsibility)模式Ruby实现

责任链模式(Chain of Responsibility Pattern)

责任链模式(chain of responsibility)

责任链模式(Chain of Responsibility)

设计模式(13)--Chain of Responsibility(责任链模式)--行为型