文章目录

  • 一、发布-订阅模式
  • 二、EventBus 组成模块
  • 三、观察者模式

一、发布-订阅模式


发布订阅模式 :

  • 发布者 Publisher : 状态改变时 , 向 消息中心 发送事件 ;
  • 订阅者 Subscriber : 到 消息中心 订阅自己关心的事件 ;
  • 消息中心 : 负责维护一个 消息队列 , 根据 消息类型 将 消息 转发给 对应的 订阅者 ;

二、EventBus 组成模块


EventBus 中有以下几个组成部分 :

  • Publisher 发布者 : 调用 post 方法发布事件 ;
  • EventBus 事件总线 : 该模块接收 发布者发布的事件 , 将事件转发给对应的 Subscriber 订阅者 ;
  • Subscriber 订阅者 : 使用 @Subscriber 注解修饰 , 接收发布的事件 , 并处理事件 ;
  • Event 事件 : 自定义类型 , 通过不同的事件类型 , 确定事件应该发送给哪个订阅者 ;

EventBus 是 发布 - 订阅 模式 的事件总线框架 , 事件的 发布者 与 订阅者 实现了解耦 , 简化了 Android 中各个组件之间的通信 ;

三、观察者模式


观察者模式中 , 目标对象 ( Subject / 被观察者 ) 中 , 维护了多个 观察者 , 观察者需要注册到 目标对象 中 , 如果目标对象发生改变 , 通知所有的观察者 , 观察者对象 收到通知后 , 进行相关处理 ;

上述结构中 , 观察者 与 目标对象 ( 被观察者 ) 是有 耦合性 的 ;

发布 - 订阅 模式 中 , 发布者 和 订阅者 是完全解耦的 ;

发布 - 订阅 模式 比 观察者模式 多了一个消息中心 , 这个 消息中心 是 发布者 和 订阅者 之间解耦的关键 ;

【EventBus】发布-订阅模式 ( EventBus 组成模块 | 观察者模式 )相关推荐

  1. 手撕发布订阅模式 eventBus

    什么是发布订阅模式 比如我们很喜欢看某个公众号号的文章,但是我们不知道什么时候发布新文章,要不定时的去翻阅:这时候,我们可以关注该公众号,当有文章推送时,会有消息及时通知我们文章更新了. 上面一个看似 ...

  2. 浅谈js下的发布订阅模式(观察者模式)

    场景 我们在做地图引擎的时候,会经常扩展一些插件,有些插件会动态根据地图渲染时机等做一些计算处理重新渲染等,这时候地图渲染时机如何通知到插件,就可以用到这个发布订阅模式来进行. 定义 发布订阅模式,也 ...

  3. 发布订阅模式与观察者模式

    背景 设计模式并非是软件开发的专业术语,实际上,"模式"最早诞生于建筑学. 设计模式的定义是:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决方案.通俗一点说,设计模式是在某 ...

  4. 深入理解观察者模式与发布订阅模式

    观察者模式与发布订阅模式区别 (全文很长,认真读完相信你会有所收获) 纸上得来终觉浅 观察者模式与发布订阅模式区别 抽象模型 观察者模式 发布-订阅模式 结论 困惑 发布订阅模式?? jQuery的发 ...

  5. 【设计模式】692- TypeScript 设计模式之发布-订阅模式

    前言 在之前两篇自测清单中,和大家分享了很多 JavaScript 基础知识,大家可以一起再回顾下~ 本文是我在我们团队内部"「现代 JavaScript 突击队」"分享的一篇内容 ...

  6. 设计模式-发布订阅模式

    这段时间在看vue的双向绑定原理,知道了vue的核心三大件:Observer, Complie, Watcher. Observer用于监听属性的变化,如有变动就通知 Watcher. Compile ...

  7. JavaScript 设计模式之发布-订阅模式(上)

    什么是发布订阅模式? 发布-订阅模式又叫观察者模式,它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知.在JavaScript开发中,我们一般用事件模型来替 ...

  8. 【EventBus】发布-订阅模式 ( Android 中使用 发布-订阅模式 进行通信 )

    文章目录 一.拷贝 发布-订阅模式 相关类 二.完整代码示例 一.拷贝 发布-订阅模式 相关类 将上一篇博客 [EventBus]发布-订阅模式 ( 使用代码实现发布-订阅模式 ) 写的 发布-订阅模 ...

  9. 【EventBus】发布-订阅模式 ( 使用代码实现发布-订阅模式 )

    文章目录 一.发布-订阅模式 二.代码实现发布-订阅模式 1.订阅者接口 2.订阅者实现类 3.发布者 4.调度中心 5.客户端 一.发布-订阅模式 发布订阅模式 : 发布者 Publisher : ...

最新文章

  1. 收藏 | Linux常用156个命令汇总!
  2. Server 2008 R2多用户远程桌面连接授权,解决120天过期问题
  3. json格式的字符串转为json对象遇到特殊字符问题解决
  4. 处理问题:变量名‘@UserName’已声明。变量名在插叙批次或存储过程内部必须唯一
  5. 计算特征数据matlab代码,科学网—MATLAB特征提取代码 - 蒋样明的博文
  6. VSCODE更改文件时,提示:EACCES: permission denied的解决办法(ubuntu16.04虚拟机)
  7. JVM辅助信息参数设置
  8. 安卓手机浏览器排行_5g时代已来临!五月安卓手机性价比排行:两千元以上5G手机屠榜...
  9. Juniper Firewall多进单出配制实例
  10. c语言每条代码的含义,为我解释一下,代码的意思。谢谢了。
  11. 设计模式之--单例模式
  12. java 日志时间格式_java.util.logging.Logger 使用中关于时间格式的问题
  13. jdk5.0下支持JSR-223的方法
  14. 3.4实训任务 Hadoop环境搭建与安装
  15. 图层蒙版和图层剪贴路径_四种PS蒙版的运用:快速蒙版、图层蒙版、矢量蒙版、剪切蒙版...
  16. Python获取时光网电影数据
  17. 有源rc电压放大器实验报告_我们一起来认识一下RC反馈回路
  18. 【软件之道】亿图9.3 显示的内容与导出成图片后的内容不一致
  19. mt4软件怎么选对下载方式
  20. kubernetes--k8s--web管理界面使用--dashboardv1.8.3版本安装详细步骤

热门文章

  1. socket简单通信
  2. Google的成果回报型广告
  3. mysql数据库的介绍及安装
  4. javase基础回顾(三) 动态代理
  5. BZOJ 2333 【SCOI2011】 棘手的操作
  6. iOS证书申请详细流程
  7. web移动端常见问题解决方案
  8. view是怎么被展示在手机上的?
  9. C#学习笔记--详解委托,事件与回调函数
  10. C#中的委托,匿名方法和Lambda表达式