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

    一、概述

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

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

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

    责任链模式UML图如下:

     

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


     二、运用实践

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

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

    事件分发 

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

    事件拦截


    三、总结

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

    优点:

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

    缺点:

    • 不能保证请求一定被接收
    • 系统性能将受到一定影响
  • 相关阅读:
    第二周 历年学生作品评论
    第二周 WBS、NABCD查阅
    第二周 SCRUM站立会议
    第二周 燃尽图
    第二周 对读构建之法后提出的五个问题
    补上一周的进度条
    词频统计
    每周进度及工作量统计——第三周
    第三周 四人小组
    词频统计 效能分析
  • 原文地址:https://www.cnblogs.com/not2/p/11044180.html
Copyright © 2011-2022 走看看