观察者模式 和 发布订阅模式

观察者模式

什么是观察者模式?

观察者模式中存在着“目标”和“观察者”两方的对象,目标有方法可以添加、移除观察者,而观察者会有特定的接口。观察者会把自己注册到目标中,当目标发生变化时,会主动调用观察者的特定方法,将该变化通知到观察者,观察者根据情况作出处理。

观察者的示意图(图片来源于网络)

555379-20160313183429007-1351424959.png

观察者模式的核心

观察者模式的核心是:目标需要提供添加和其它管理观察者的接口,观察者将自己注册到目标,当目标发生变化主动通过回调的方式将变化通知到观察者。

观察者模式的优点和缺点

优点

观察者模式在观察者和被观察者之间建立了抽象和耦合关系,被观察者维护一个观察者的列表,被观察者不需要了解观察者,只知道观察者的特定接口。

缺点
  1. 如果一个被观察者被注册了多个观察者对象,被观察者对象发生改变的时候会将该变化通知到所有的注册过的观察者,需要考虑效率。
  2. 虽然观察者模式可以随时使得观察者知道所观察的对象发生了变化,却不能知道该变化是怎么发生的。

发布订阅模式

什么是发布订阅模式

发布订阅模式和观察者模式很相似,观察者模式也可以看做是简单的发布订阅者模式,如将观察模式下的被观察者看做是发布者,将观察者模式下的观察者看做订阅者。
发布订阅者模式在发布者、订阅者之间引入了消息中介的角色,在发布订阅者模式中,发布者和订阅者都不知道对方的存在,订阅者将自己注册到消息中介管理,发布者将消息通知到消息中介消息中介再将消息通知到特定的订阅者手上。

发布订阅模式的示意图(图片来源于网络)

555379-20160313183439366-1623019133.png

发布订阅模式和观察者模式的区别

观察者模式是在被观察者和观察者之间建立耦合关系,为较强耦合关系,观察者和被观察者相互都知道对方的存在;在发布订阅者模式中,发布者和订阅者之间没有建立直接的联系,相互之间不需要知道对方的存在,为松散耦合关系。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 设计模式概述 在学习面向对象七大设计原则时需要注意以下几点:a) 高内聚、低耦合和单一职能的“冲突”实际上,这两者...
    彦帧阅读 3,862评论 0 14
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 136,322评论 19 139
  • 1 场景问题# 1.1 订阅报纸的过程## 来考虑实际生活中订阅报纸的过程,这里简单总结了一下,订阅报纸的基本流程...
    七寸知架构阅读 4,788评论 5 57
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 11,541评论 1 32
  • 2018年3月9日晴 今天下午看着天气很好就骑着电驴去接儿子们,结果在路上差点被冻僵了,话说这不都是春天了吗?...
    mm阿章阅读 221评论 0 0

友情链接更多精彩内容