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

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

           

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

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

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

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

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

        

  • 相关阅读:
    luogu P1455 搭配购买
    浅谈筛素数
    luogu P1205 方块转换
    luogu P2241 统计方形
    luogu P1866 编号
    luogu P1042 乒乓球
    4.7清明考试(完蛋)
    LINUX 启动图形界面和查看运行级别
    密钥登录LINUX步骤
    服务命令只支持基本的LSB操作(启动、停止、重新启动、尝试重启、重新加载、强制重新加载、状态)。对于其他操作,请尝试使用systemctl。
  • 原文地址:https://www.cnblogs.com/cangqiongbingchen/p/5005254.html
Copyright © 2011-2022 走看看