观察者模式是一个使用率非常高的模式,常用于 订阅——发布系统。
其 最重要的作用就是 解耦,将观察者和被观察者解耦,让他们之间的依赖性更小。具体应用也就是说 让 UI层 和具体的业务逻辑解耦。

看计算机书籍的定义:定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于他的对象都会得到通知和更新。

使用场所:1,事件多集触发 ;2 跨系统的消息交换场景,例如消息队列,事件总线的处理机制等。

大致角色分类:

被观察者(Observable):抽象的角色,把所有观察者对象的引用保存在一个集合里,数量不定,对外提供一个接口,方便进行添加和删除观察者对象。

具体被观察者(ConcerteObservable):也就是我们的具体事件,当我们的这个事件内部状态发生改变时候,给所有的注册过的观察者发出通知.

观察者(Observer): 抽象角色, 观察者的抽象类,对外提供一个接口,方便得到通知时更新自己。

具体观察者(ConcereteObserver): 具体的观察者, 观察者的接口更新实例类, 当接到通知时候 及时更新自己。

代码举例:超市——购物者
观察者:购物者

被观察者:超市

具体实现

输出内容:

这个观察者的Demo就完成了。

Observer 和Observable 是jdk的内置类型,观察者这个模式很重要。具体本人就不再做过多的解释。

小结一下:
观察者模式主要作用就是对象的解耦,将观察者和被观察者完全分离。只是依赖于Observer 和Observable 的抽象。

优点: Observer 和Observable 之间是抽象耦合, 应对业务变化。 增强的系统的灵活性,和扩展性。
缺点: 运行效率问题,一个被观察者,多个观察者,开发和调试比较麻烦, java消息通知是默认顺序执行的, 一个观察者卡顿了,整体效率会下降,不过我们可以考虑 异步方式来解决。

观察者模式——在Android中的应用 ,有时间在告诉大家啦。

观察者模式——解耦利器相关推荐

  1. 分布式应用解耦利器rabbitmq

    消息能够使应用连接和扩展,作为分布式架构中一大组件使用,消息是异步的能够分离发送数据和接收数据,达到应用的解耦; 使用消息的基本特性是能够无阻塞的发送消息,异步化处理应用调用逻辑,基本模式发布订阅功能 ...

  2. Laravel event 事件的简单使用

    有时候当我们单纯的看 Laravel手册的时候会有一些疑惑,比如说系统服务下的授权和事件,这些功能服务的应用场景是什么,其实如果没有经历过一定的开发经验有这些疑惑是很正常的事情,但是当我们在工作中多加 ...

  3. 事件中心与观察者模式

    事件中心与观察者模式 楔子 观察者模式 事件中心demo 被观察者 具体的事件 观察者 具体事件的具体观察者 主题 具体的主题->事件中心 验证事件中心 总结 楔子 event一种我们在代码中经 ...

  4. 胡说八道设计模式—观察者模式

    文章目录 观察者模式 实现方式 同步阻塞 异步非阻塞 进程间 代码 应用场景 P2P((进程内同步) P2P(进程内异步) 每个观察者内使用线程 使用线程池处理每个观察者 P2P(进程间同步) RPC ...

  5. 《沈剑架构师训练营》第7章 - 架构解耦

    34.解耦:配置中心,与配置架构演进. no34:配置文件架构有什么核心痛点? 1.上游痛:扩容的是下游,改配置重启的是上游(耦合,典型反向依赖) 2.下游痛:不知道谁依赖于自己(难以实施服务治理) ...

  6. 揭秘大型网站架构进化之路

    丁浪,非著名架构师.关注高并发.高可用的架构设计,对系统服务化.分库分表.性能调优等方面有深入研究和丰富实践经验.热衷于技术研究和分享. 声明:版权归丁浪作者本人所有,转载请联系作者本人. 互联网上有 ...

  7. 到底什么时候该使用MQ 1

      MQ是干嘛的 消息队列(Message Queue),后文称MQ,是一种跨进程的通信机制,用于上下游传递消息. 在互联网架构中,MQ是一种非常常见的上下游"逻辑解耦+物理解耦" ...

  8. 整理大型网站架构必知必会的几个服务器知识

    1.负载均衡服务器 负载均衡服务器主要作用是实现某些类型服务器的规模扩展.比如对于系统前端的web服务器和后端的数据库服务器,想通过加服务器实现N+1横向扩展,通过多台服务器负载分担压力,负载均衡必不 ...

  9. 【另类见解】那些要保证缓存和数据库数据一致性的最后怎么了?

    " 现在如果说不出几句如何保证数据一致性方案的话,觉得出去面试都丢人,尤其是缓存和数据库的数据一致性 " 全程无图,请谨慎阅读 缓存对于程序性能而言,无疑是个杀手锏,但不是完美的解 ...

最新文章

  1. 协程,又称微线程和纤程
  2. matlab直流电机双闭环控制系统设计,基于MATLAB的直流电机双闭环调速系统设计毕业论文.doc...
  3. 软件开发者面试百问答案,老紫竹研究室出品(已经有64个)
  4. 后宫宛如传服务器维护,合服丨《后宫宛如传》合服公告
  5. HDU4907小技巧
  6. Java并发/多线程教程——1
  7. AIX5.3安装oracle10g
  8. Windows7启动信息修改
  9. 面向对象(类,面向对象三大特性)
  10. C语言学习:C语言编译流程
  11. 彼得林奇:全球理财师中的NO.1
  12. 力扣周赛 第280场 Java题解
  13. python+excel接口自动化测试(实现 数据分离,token获取,数据依赖,发送邮件)
  14. python word 合并单元格_在word文档选项卡中检测合并单元格
  15. Self-augmented Unpaired Image Dehazing via Density and Depth Decomposition程序运行记录
  16. 基本函数依赖和候选键_[总结]关系数据库设计基础(函数依赖、无损连接性、保持函数依赖、范式、……)...
  17. 洛谷P1489 猫狗大战
  18. bulk es 删除_ES 批量操作 bulk
  19. HDU - 3003 - Pupu(快速幂)
  20. Java 打开浏览器

热门文章

  1. 00018计算机应用基础2019年4月,2019年4月自考计算机应用基础考前试题和答案00018.pdf...
  2. pip安装deb_趟坑:使用pip安装TensorFlow
  3. sql server php 案例,php连接sql server 2008案例
  4. 机器学习付费专栏的一些简介
  5. 看雪Unicorn高级逆向与反混淆学习笔记
  6. 变分自编码器:球面上的VAE(vMF-VAE)
  7. 岗位推荐 | 京东AI研究院招聘计算机视觉算法实习生
  8. 漫画解读ERNIE:能和BERT一较高下的知识增强语义表示模型
  9. 不用L约束又不会梯度消失的GAN,了解一下?
  10. 香港大学顾佳涛:非自回归神经机器翻译 | 直播预告