zoukankan      html  css  js  c++  java
  • 观察者模式与发布/订阅模式的区别

    [原]观察者模式与发布/订阅模式的区别

           

            不管是维基百科还是百度百科,搜索观察者模式,都会发现观察者模式的定义是观察者模式(有时又被称为发布/订阅模式),即一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实作事件处理系统。最开始老师让我区别观察者模式与发布/订阅模式,简直无从下手。感觉明明就是一样的,而且《设计模式》书中也很明确地给出了观察者模式又称为发布/订阅模式,但是后来查了很多资料、也问了老师之后发现观察者模式与发布/订阅模式还是有区别的。

    (1)观察者模式本质上是一种对象行为模式,而 发布/订阅模式本质上是一种架构模式,强调组件的作用

    (2)观察者模式定义了对象间的一种一对多依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并采用一种机制实现自动更新。观察者模式的被观察者对象即目标对象中保留了观察者的集合,当被观察者对象的状态发生变化时,会遍历观察者对象集合,然后通知观察者对象得到更新。而发布/订阅模式并不保留观察者与被观察者之间的消息,类似一种生产者消费者问题。

    生产者把数据放入缓冲区,消费者从缓冲区取出数据。发布/订阅模式强调组件的作用,生产者通过组件将数据推(push)送到缓冲区,通过组件通知消费者是否选择将缓冲区的数据拉(pull)过来,即取出数据。发布/订阅模式很好地实现了解耦。比如彩信,在我们手机的客户端获取彩信短信后,并没有获取它的全部内容,当我们选择获取后,再从缓冲区里将我们希望获取的内容得到。

    (3)观察者模式多应用在单片机,而发布/订阅模式更多地在分布式环境中应用。

        

  • 相关阅读:
    VC++ 之 文件操作
    Delphi7 API(5) 消息篇:WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE
    VC++ 之 输入/输出类库(二)
    VB 访问控制面板
    Delphi7 API(4) 消息_重绘
    Lisp简明教程
    一次快速排序错误引发的思考(2)
    一次快速排序错误引发的思考(1)
    Common Lisp编译程序的小技巧
    暴风影音5免去广告的小技巧
  • 原文地址:https://www.cnblogs.com/cangqiongbingchen/p/5005254.html
Copyright © 2011-2022 走看看