观察者模式与发布/订阅模式的区别
2015-11-29 19:40
555 查看
[原]观察者模式与发布/订阅模式的区别
不管是维基百科还是百度百科,搜索观察者模式,都会发现观察者模式的定义是观察者模式(有时又被称为发布/订阅模式),即一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。最开始老师让我区别观察者模式与发布/订阅模式,简直无从下手。感觉明明就是一样的,而且《设计模式》书中也很明确地给出了观察者模式又称为发布/订阅模式,但是后来查了很多资料、也问了老师之后发现观察者模式与发布/订阅模式还是有区别的。(1)观察者模式本质上是一种对象行为模式,而 发布/订阅模式本质上是一种架构模式,强调组件的作用。
(2)观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并采用一种机制实现自动更新。观察者模式的被观察者对象即目标对象中保留了观察者的集合,当被观察者对象的状态发生变化时,会遍历观察者对象集合,然后通知观察者对象得到更新。而发布/订阅模式并不保留观察者与被观察者之间的消息,类似一种生产者消费者问题。
生产者把数据放入缓冲区,消费者从缓冲区取出数据。发布/订阅模式强调组件的作用,生产者通过组件将数据推(push)送到缓冲区,通过组件通知消费者是否选择将缓冲区的数据拉(pull)过来,即取出数据。发布/订阅模式很好地实现了解耦。比如彩信,在我们手机的客户端获取彩信短信后,并没有获取它的全部内容,当我们选择获取后,再从缓冲区里将我们希望获取的内容得到。
(3)观察者模式多应用在单片机,而发布/订阅模式更多地在分布式环境中应用。
相关文章推荐
- 理想的程序员
- ThinkPHP框架一 框架搭建
- 逆袭指数---杭电校赛(暴力搜索)
- python下载文件
- hdu 计算机学院大学生程序设计竞赛(2015’11)质方数
- android.mk文件内容
- hiho刷题日记——第二十五天最短路径·三:SPFA算法
- FlowDroid在Ubuntu上正确使用姿势
- 【HDU5587 BestCoder Round 64 (div1)B】【迭代 前缀和思想】Array 前m个数的二进制中共有多少个1
- Android-Android6.0新特性-略讲1
- hdu 计算机学院大学生程序设计竞赛(2015’11)投币洗衣机
- mysql循环结构
- hdu 计算机学院大学生程序设计竞赛(2015’11)搬砖
- IE和ff的兼容技巧
- 使用SpringMVC+Java mail发送HTML邮件
- 4.2.6特殊运算符:is运算符;条件运算符;new运算符;typeof运算符
- kettle学习:JsonInput使用
- 黑马程序员——Java基础---IO流
- 表格边框总结
- HDU 5584 LCM Walk(逆推)——2015ACM/ICPC亚洲区上海站