zoukankan      html  css  js  c++  java
  • 责任链模式

    一、概述

    一般问题:多个对象可以处理同一请求,具体由哪个对象处理则在运行时动态决定

    核心方案:将这些对象连成一条链,并沿着这条链传递请求,直到有对象处理它为止

    设计意图:一般情况下请求一个对象可以直接调用其方法,这样请求发出者与处理者耦合;如果同一请求可以被多个对象处理,根据具体条件不同调用不同对象方法,这样请求发出者与多个处理者都耦合在一起;为了简化请求发出者的逻辑,同时解耦请求发出者和处理者,责任链模式将所有请求处理者连接成一条链,同时沿着这条链传递请求,直到请求被执行为止。

    责任链模式UML图如下:

     

    Handler本身维护下一个处理者实例。


     二、运用实践

    Android的事件分发机制就用到了责任链模式。Android的View和ViewGroup层层组合呈树型结构,每层都可以处理Touch事件,最终由谁来处理,需要事件拦截机制决定。

    View树就是一条处理链,事件层层向下传递,正常情况下一个完整传递如下图:

    事件分发 

    假如事件在LinearLayout层被处理,则不会再往下分发:

    事件拦截


    三、总结

    总结:责任链模式是一种行为型设计模式,目的是将请求的发起与执行解耦。

    优点:

    • 降低耦合度,请求的发送与接收解耦
    • 处理类可以灵活增减

    缺点:

    • 不能保证请求一定被接收
    • 系统性能将受到一定影响
  • 相关阅读:
    js事件绑定函数
    代码练习(二维数组的定义,字符串加减,子元素的创建及绑定,排序算法)
    网页中字符串元素的相减
    JavaScript算法实现排序
    学习英语很重要的一个点
    hasattr(),getattr(),setattr()的使用
    HDU 3746 Cyclic Nacklace
    HDU 1686 Oulipo
    HDU 1711 Number Sequence
    正则表达式的常用操作符
  • 原文地址:https://www.cnblogs.com/not2/p/11044180.html
Copyright © 2011-2022 走看看