美文网首页
必知必会的设计模式10

必知必会的设计模式10

作者: jkwen | 来源:发表于2021-06-23 22:31 被阅读0次

    责任链模式

    属行为型设计模式,「使多个对象(处理者)都有机会处理请求,从而避免请求发起者和处理者之间的耦合关系。将多个处理者连成一条链,并沿着这条链传递该请求,直到有处理者处理它为止」。

    这里的链就和数据结构里的链表很类似,

    class TrainNode {
        public TrainNode next;
    }
    

    前一级的处理者持有着下一级的处理者对象引用,这样一来,如果自己处理不了的请求就可以传递给下一级去处理。

    所以作为处理者要明确这么几件事,1. 知道自己的处理等级,2. 当请求来临时处理相应等级的请求,3. 如果处理不了,就将请求交给下一级处理。

    请求的发起者只要知道链表头(即第一个处理者)即可,因为有了链表头请求事件就可以沿着责任链被响应处理。这也是实现解耦的关键。同时,请求者也不需要关心请求的具体处理过程,反正总能得到请求响应。

    再有一个场景类,负责封装一下处理者的责任链生成过程。这样一来,仅提供给请求者链表头就可以了。

    优缺点

    • 请求与处理解耦,提高系统的灵活性。
    • 性能问题,每个请求都要沿着责任链进行传递处理(这也是链表结构的缺点,不能像数组那样随机访问)。
    • 问题调整追踪不好定位。

    使用场景

    责任链模式的使用场景有点和策略模式的类似,区别是,策略模式由高层就决定了使用什么策略,而责任链更像是高层只负责责任链的建立,实际处理则在请求产生后由责任链来决定。

    所以其实策略模式能使用的场景,责任链模式也就可以使用。

    在 Android 中的使用

    典型的使用是 View 的点击事件分发机制。Android 基本功-事件分发机制 可以通过这篇文章看下大致过程。其次,据说 OkHTTP 中也运用了责任链模式,但这个还有待探究,后续找时间分析下。

    参考内容

    「设计模式之禅(第 2 版)」
    「Android 源码设计模式解析与实战」

    相关文章

      网友评论

          本文标题:必知必会的设计模式10

          本文链接:https://www.haomeiwen.com/subject/kzeiyltx.html