【EventBus】发布-订阅模式 ( EventBus 组成模块 | 观察者模式 )
文章目录
- 一、发布-订阅模式
- 二、EventBus 组成模块
- 三、观察者模式
一、发布-订阅模式
发布订阅模式 :
- 发布者 Publisher : 状态改变时 , 向 消息中心 发送事件 ;
- 订阅者 Subscriber : 到 消息中心 订阅自己关心的事件 ;
- 消息中心 : 负责维护一个 消息队列 , 根据 消息类型 将 消息 转发给 对应的 订阅者 ;
二、EventBus 组成模块
EventBus 中有以下几个组成部分 :
- Publisher 发布者 : 调用
post
方法发布事件 ; - EventBus 事件总线 : 该模块接收 发布者发布的事件 , 将事件转发给对应的
Subscriber
订阅者 ; - Subscriber 订阅者 : 使用
@Subscriber
注解修饰 , 接收发布的事件 , 并处理事件 ; - Event 事件 : 自定义类型 , 通过不同的事件类型 , 确定事件应该发送给哪个订阅者 ;
EventBus 是 发布 - 订阅 模式 的事件总线框架 , 事件的 发布者 与 订阅者 实现了解耦 , 简化了 Android 中各个组件之间的通信 ;
三、观察者模式
观察者模式中 , 目标对象 ( Subject / 被观察者 ) 中 , 维护了多个 观察者 , 观察者需要注册到 目标对象 中 , 如果目标对象发生改变 , 通知所有的观察者 , 观察者对象 收到通知后 , 进行相关处理 ;
上述结构中 , 观察者 与 目标对象 ( 被观察者 ) 是有 耦合性 的 ;
发布 - 订阅 模式 中 , 发布者 和 订阅者 是完全解耦的 ;
发布 - 订阅 模式 比 观察者模式 多了一个消息中心 , 这个 消息中心 是 发布者 和 订阅者 之间解耦的关键 ;
【EventBus】发布-订阅模式 ( EventBus 组成模块 | 观察者模式 )相关推荐
- 手撕发布订阅模式 eventBus
什么是发布订阅模式 比如我们很喜欢看某个公众号号的文章,但是我们不知道什么时候发布新文章,要不定时的去翻阅:这时候,我们可以关注该公众号,当有文章推送时,会有消息及时通知我们文章更新了. 上面一个看似 ...
- 浅谈js下的发布订阅模式(观察者模式)
场景 我们在做地图引擎的时候,会经常扩展一些插件,有些插件会动态根据地图渲染时机等做一些计算处理重新渲染等,这时候地图渲染时机如何通知到插件,就可以用到这个发布订阅模式来进行. 定义 发布订阅模式,也 ...
- 发布订阅模式与观察者模式
背景 设计模式并非是软件开发的专业术语,实际上,"模式"最早诞生于建筑学. 设计模式的定义是:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案.通俗一点说,设计模式是在某 ...
- 深入理解观察者模式与发布订阅模式
观察者模式与发布订阅模式区别 (全文很长,认真读完相信你会有所收获) 纸上得来终觉浅 观察者模式与发布订阅模式区别 抽象模型 观察者模式 发布-订阅模式 结论 困惑 发布订阅模式?? jQuery的发 ...
- 【设计模式】692- TypeScript 设计模式之发布-订阅模式
前言 在之前两篇自测清单中,和大家分享了很多 JavaScript 基础知识,大家可以一起再回顾下~ 本文是我在我们团队内部"「现代 JavaScript 突击队」"分享的一篇内容 ...
- 设计模式-发布订阅模式
这段时间在看vue的双向绑定原理,知道了vue的核心三大件:Observer, Complie, Watcher. Observer用于监听属性的变化,如有变动就通知 Watcher. Compile ...
- JavaScript 设计模式之发布-订阅模式(上)
什么是发布订阅模式? 发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.在JavaScript开发中,我们一般用事件模型来替 ...
- 【EventBus】发布-订阅模式 ( Android 中使用 发布-订阅模式 进行通信 )
文章目录 一.拷贝 发布-订阅模式 相关类 二.完整代码示例 一.拷贝 发布-订阅模式 相关类 将上一篇博客 [EventBus]发布-订阅模式 ( 使用代码实现发布-订阅模式 ) 写的 发布-订阅模 ...
- 【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 )
文章目录 一.发布-订阅模式 二.代码实现发布-订阅模式 1.订阅者接口 2.订阅者实现类 3.发布者 4.调度中心 5.客户端 一.发布-订阅模式 发布订阅模式 : 发布者 Publisher : ...
最新文章
- 收藏 | Linux常用156个命令汇总!
- Server 2008 R2多用户远程桌面连接授权,解决120天过期问题
- json格式的字符串转为json对象遇到特殊字符问题解决
- 处理问题:变量名‘@UserName’已声明。变量名在插叙批次或存储过程内部必须唯一
- 计算特征数据matlab代码,科学网—MATLAB特征提取代码 - 蒋样明的博文
- VSCODE更改文件时,提示:EACCES: permission denied的解决办法(ubuntu16.04虚拟机)
- JVM辅助信息参数设置
- 安卓手机浏览器排行_5g时代已来临!五月安卓手机性价比排行:两千元以上5G手机屠榜...
- Juniper Firewall多进单出配制实例
- c语言每条代码的含义,为我解释一下,代码的意思。谢谢了。
- 设计模式之--单例模式
- java 日志时间格式_java.util.logging.Logger 使用中关于时间格式的问题
- jdk5.0下支持JSR-223的方法
- 3.4实训任务 Hadoop环境搭建与安装
- 图层蒙版和图层剪贴路径_四种PS蒙版的运用:快速蒙版、图层蒙版、矢量蒙版、剪切蒙版...
- Python获取时光网电影数据
- 有源rc电压放大器实验报告_我们一起来认识一下RC反馈回路
- 【软件之道】亿图9.3 显示的内容与导出成图片后的内容不一致
- mt4软件怎么选对下载方式
- kubernetes--k8s--web管理界面使用--dashboardv1.8.3版本安装详细步骤