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

必知必会的设计模式10

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

责任链模式

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

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

class TrainNode {
    public TrainNode next;
}

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

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

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

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

优缺点

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

使用场景

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

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

在 Android 中的使用

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

参考内容

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

相关文章

  • 必知必会的设计模式10

    责任链模式 属行为型设计模式,「使多个对象(处理者)都有机会处理请求,从而避免请求发起者和处理者之间的耦合关系。将...

  • Java面试经典题目六(网络知识及设计模式)

    设计模式(必知必会) 【1】你知道那些设计模式? 答:单例模式、观察者模式、MVC模式、工厂模式、桥接模式、代理模...

  • 代理模式续集

    动态代理 讲代理模式不讲动态代理简直是耍流氓。相比 必知必会的设计模式8[https://www.jianshu....

  • 必知必会的设计模式7

    策略模式(Strategy Pattern) 属行为类设计模式,「定义一组算法,将每个算法封装起来,并且使它们之间...

  • 必知必会的设计模式8

    代理模式(Proxy Pattern) 属结构型设计模式,「为其他对象提供一种代理以控制对这个对象的访问」。 代理...

  • 必知必会的设计模式9

    外观模式(Facade Pattern) 属结构型设计模式,「要求一个子系统的外部与其内部的通信必须通过一个统一的...

  • 必知必会的设计模式1

    装饰模式(Decorator Pattern) 属结构型设计模式,也称包装模式,「动态地给一个对象添加一些额外的职...

  • 必知必会的设计模式2

    桥接模式(Bridge Pattern) 属结构型设计模式,也称桥梁模式,「将抽象和实现解耦,使得两者可以独立地变...

  • 必知必会的设计模式5

    观察者模式(Observer Pattern) 属行为类设计模式,「定义对象间一种一对多的依赖关系,使得每当一个对...

  • 必知必会的设计模式6

    单例模式(Singleton Pattern) 属创建类设计模式,「确保某个类只有一个实例,而且自行实例化并向整个...

网友评论

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

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