把书读薄 | 《设计模式之美》设计模式与范式(行为型-观察者模式)(下)

简介: 本文对应设计模式与范式:行为型(56-57),观察者模式 (Observer Pattern) 。创建型 → 对象创建问题,结构型 → 类与对象的组合或封装,行为性 → 类或对象间的交互。

静态数组保存 FindState 避免重复创建:


网络异常,图片无法展示
|


上面循环递归订阅类及其父类(直到父类java、javax、android.开头为止),递归同时调用 findUsingReflectionInSingleClass() 方法:


网络异常,图片无法展示
|


findSubscriberMethods()通过读取编译时生成文件或反射获得订阅类中所有的订阅方法数据,接着看下subscribe() 订阅方法又做了啥:


网络异常,图片无法展示
|


所以这一步的核心逻辑是:


获取所有订阅了此事件类型的订阅者信息 → 根据优先级将订阅者信息插入订阅者队列 → 获得当前订阅者所有事件队列,将当前事件添加其中方便后续取消订阅 → 如果是粘性事件,直接post此事件给当前订阅者。


③ 订阅者取消订阅


直接跟 unregister() 方法:


网络异常,图片无法展示
|


跟下 unsubscribeByEventType(),取消订阅还是很简单的~


网络异常,图片无法展示
|


④ 发布普通事件


跟下 post() 方法:


网络异常,图片无法展示
|


这里的currentPostingThreadState是一个 ThreadLocal<PostingThreadState>,线程内部存储类,可指定线程存取数据,跟下 postSingleEvent()


网络异常,图片无法展示
|


是否考虑事件继承,最后都是走的 postSingleEventForEventType(),跟下:


网络异常,图片无法展示
|


跟下 postToSubscription()


网络异常,图片无法展示
|


以上就是EventBus对于普通事件的分发,根据订阅事件的线程模式,执行回调的过程。


⑤ 发布粘性(Sticky)事件


网络异常,图片无法展示
|


相比普通事件就多了一步把事件放到粘性集合里的操作,粘性事件分发的话在上面的subscribe()中已经提到了:


网络异常,图片无法展示
|


以上就是EventBus主要原理,不是标准的观察者模式实现,但整体就是一个发布/订阅的框架,也拥有观察者模式的优点,如:发布者和订阅者解耦。


参考文献:




相关文章
|
设计模式 监控 Java
Kotlin - 改良设计模式 - 观察者模式
Kotlin - 改良设计模式 - 观察者模式
244 3
|
7月前
|
设计模式 缓存 Java
Java设计模式(二):观察者模式与装饰器模式
本文深入讲解观察者模式与装饰器模式的核心概念及实现方式,涵盖从基础理论到实战应用的全面内容。观察者模式实现对象间松耦合通信,适用于事件通知机制;装饰器模式通过组合方式动态扩展对象功能,避免子类爆炸。文章通过Java示例展示两者在GUI、IO流、Web中间件等场景的应用,并提供常见陷阱与面试高频问题解析,助你写出灵活、可维护的代码。
|
5月前
|
设计模式 消息中间件 传感器
Java 设计模式之观察者模式:构建松耦合的事件响应系统
观察者模式是Java中常用的行为型设计模式,用于构建松耦合的事件响应系统。当一个对象状态改变时,所有依赖它的观察者将自动收到通知并更新。该模式通过抽象耦合实现发布-订阅机制,广泛应用于GUI事件处理、消息通知、数据监控等场景,具有良好的可扩展性和维护性。
471 8
|
设计模式 存储 供应链
前端必须掌握的设计模式——观察者模式
观察者模式(Observer Pattern)是一种行为型设计模式,实现了一种订阅机制。它包含两个角色:**观察者**(订阅消息、接收通知并执行操作)和**被观察者**(维护观察者列表、发送通知)。两者通过一对多的关系实现解耦,当被观察者状态改变时,会通知所有订阅的观察者。例如,商店老板作为被观察者,记录客户的需求并在商品到货时通知他们。前端应用中,如DOM事件注册、MutationObserver等也体现了这一模式。
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
|
10月前
|
设计模式 消息中间件 存储
【设计模式】【行为型模式】观察者模式(Observer)
一、入门 什么是观察者模式? 观察者模式(Observer Pattern)是一种行为设计模式,它定义了对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会收到通知并自动更新。
456 9
|
设计模式 消息中间件 存储
设计模式:观察者模式
观察者模式属于行为型设计模式,用于建立对象间的一对多依赖关系。当主题(Subject)状态变化时,所有依赖的观察者(Observer)会自动收到通知并更新。
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
277 6
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
133 1
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
117 3

热门文章

最新文章