zoukankan      html  css  js  c++  java
  • 【设计模式】观察者模式与订阅发布模式

    观察者模式

    观察者模式定义了对象间得一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都将得到通知,并自动更新。

    观察者模式属于行为型模型,行为型模式关注的时对象间的通讯,观察者模式就是观察者和被观察者之间的通讯。

    观察者模式有一个别名叫”发布-订阅模式“或者说时”订阅-发布模式“,订阅者和订阅目标是联系在一起的,当订阅目标发生改变时,逐个通知订阅者,我们可以用报纸期刊的订阅来形象的说明,

    当你订阅了一份报纸,每天都会有一份最新的报纸送到受伤,有多少人订阅报纸,报社就会发多少报纸。报社和报纸的客户就是一对多的关系。

    订阅-发布模式

    其实24种基本的设计模式中并没有发布订阅模式,上面也说了,他只是观察者模式的一个别称。

    但是经过时间的沉淀,似乎他已经强大了起来,已经独立于观察者模式,成为另外一种不同的设计模式。

    在现在的发布订阅模式中,称为发布者的消息发送者不会将消息直接发送给订阅者,这意味着发布者和订阅者不知道彼此的存在。在发布者和订阅者之间存在第三个组件,称为调度中心或事件通道,它维持着发布者和订阅者之间的联系,过滤所有发布者传入的消息并相应地分发它们给订阅者。

    举一个例子,你在微博上关注了A,同时其他很多人也关注了A,那么当A发布动态的时候,微博就会为你们推送这条动态。A就是发布者,你是订阅者,微博就是调度中心,你和A是没有直接的消息往来的,全是通过微博来协调的(你的关注,A的发布动态)。

    两种模式的区别

    两种模式的实现结构如下:

    可以看出,发布订阅模式相比观察者模式多了事件通道,事件通道作为调度中心,管理事件的订阅和发布工作,彻底隔绝了订阅者和发布者的依赖关系。即订阅者在订阅事件的时候,只关注事件本身,而不关心谁会发布这个事件

    观察者模式有两个重要的角色,即目标和观察者。在目标和观察者之间是没有事件通道的。一方面,观察者想要订阅目标事件由于没有事件通道,因此必须将自己添加到目标中进行管理。

    另一方面。目标在触发事件的时候也无法将通知操作委托给事件通道,因此只能亲自去通知所有的观察者。

  • 相关阅读:
    NanUI for Winform发布,让Winform界面设计拥有无限可能
    新浪微博.Net SDK第三版源代码和示例【最后一次更新了】
    写个C#命令行参数解析的小工具
    Mac安装Windows 10的简明教程
    自己动手,让Entity Framework Power Tools在VS2015重放光彩
    C++CLI使用.net委托,*Callback注意"this"
    【转】IIS上的反向代理
    asp.net mvc 验证码
    win2008R2 下解决关于mysql odbc无法正常工作问题
    中国健康医学教育网
  • 原文地址:https://www.cnblogs.com/Ewarm/p/12205101.html
Copyright © 2011-2022 走看看