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

简介: 本文对应设计模式与范式:行为型(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主要原理,不是标准的观察者模式实现,但整体就是一个发布/订阅的框架,也拥有观察者模式的优点,如:发布者和订阅者解耦。


参考文献:




相关文章
|
15天前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
|
1月前
|
设计模式 传感器
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
【设计模式】观察者模式(定义 | 特点 | Demo入门讲解)
37 0
|
10天前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
21 3
|
22天前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
33 9
|
21天前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
27 2
|
30天前
|
设计模式 监控 UED
设计模式之观察者模式
【10月更文挑战第12天】 观察者模式是一种行为型设计模式,定义了一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都会自动更新。主要由主题(被观察者)和观察者组成,实现对象间的松耦合,广泛应用于用户界面、事件驱动系统和数据监控等领域。
|
1月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
本教程详细讲解Kotlin语法,适合深入学习。对于快速掌握Kotlin,推荐“简洁”系列教程。本文特别介绍了观察者模式,包括使用Java API和Kotlin委托属性(如Delegates.observable)实现的方法,旨在帮助开发者更高效地实现和优化观察者模式的应用。
32 3
|
2月前
|
设计模式 Java 关系型数据库
设计模式——观察者模式
观察者模式介绍、观察者模式优化天气预报案例、JDK 的Observable类和Observer类
设计模式——观察者模式
|
1月前
|
设计模式 监控 Java
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
Kotlin教程笔记(52) - 改良设计模式 - 观察者模式
28 0
|
3月前
|
设计模式 存储 前端开发
【十四】设计模式~~~行为型模式~~~观察者模式(Java)
文章详细介绍了观察者模式(Observer Pattern),这是一种对象行为型模式,用于建立对象之间的一对多依赖关系。当一个对象状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。文中通过交通信号灯与汽车的案例以及多人联机对战游戏的设计方案,阐述了观察者模式的动机和应用场景。接着,文章介绍了观察者模式的结构、角色、优点、缺点以及适用情况,并通过代码示例展示了如何在Java中实现观察者模式。此外,还探讨了观察者模式在MVC架构中的应用以及Java中对观察者模式的支持。
【十四】设计模式~~~行为型模式~~~观察者模式(Java)