zoukankan      html  css  js  c++  java
  • 观察者模式——出版者与订阅者

           在说Java内置的观察者模式之前,我们先来回想一下大话中这个模式的样例。例如以下图,前台负责通知那些看股票和看新闻的人,告知他们情况,这些看股票、看新闻的人对此做出反应。比方停下来继续工作等等。

          故事大概就是这样。回顾不起来的同学能够再翻翻书看一下。



          回顾了观察者模式之后。我们来看一个新的样例——出版者和订阅者。

          观察者模式定义了一系列对象之间的一对多的关系。

          先不看复杂的类图,看一张简单的图:三个订阅者订阅了该出版社,当出版社有了新的书籍或杂志的话。就将消息通知给三位订阅者,他们三个就是观察者。

          当一个对象改变状态,其它依赖者就会收到通知。


          由上面的图,能够看出。主题对象(上面的出版者)与观察者(订阅者A,B。C)他们是一对多的关系,可不可能是多对多呢?

          当然不能够,尽管在实际上一个订阅者可能会订阅多个出版者,但在观察者中,我们让多个观察者同一时候监听一个主题对象,当主体对象在状态上发生变化时会自己主动通知观察者,使他们能够自己主动更新自己。在这里,还能够回到开篇的样例中,假设有两个前台,一个说老板来了。一个说老板没来,那不就乱套了。


    观察者的“去”与“留”

           订阅者A说到,这家出版社太不行了,新闻不够及时。书也不好看,我不想订阅了。

    这时候A是不能够自己擅自离开这个观察者群体的。他要向出版者请示。待出版者允许后,把A从中剔除,A以后就不会再收到出版者的消息了。

          相同,假设D想成为一个订阅者,他也不能擅自进入,也要等待主题对象的批准才干够进入。


    为了交互对象之间的松耦合设计而努力

          在出版者和订阅者的样例中,二者并不十分清楚对方内部的结构和细节部分。这就是一种松耦合的设计,这样一来,也使得观察者的“去”和“留”更加灵活,系统也更富有弹性。


    观察者模式中的“推”与“拉”

          出版者得到消息后。通知给订阅者。在这个过程中。显然出版者处于主动地位,而订阅者是被动接受通知才改变自己的。所以说,主题对象出版者一直是在往外推,而不让观察者们从自己中取(也就是所谓的”拉“)。


    Java内置的观察者模式

    这里要用到的是java.util包中的Observer接口和Observable类。


          在Java中,使用Observable类和Observer接口后,不再是Subject和Observer两个接口了,取而代之的是Java内置的Observable类和Observer接口。因此,Publisher是继承而非实现。

         注意:

         1)尽管两个图中都有Observer接口。但这两个是不同的。一个是自定义的接口。一个是Java中已经有的接口。

         2)类图中的一些方法都略去了。主要为了体现大体上的关系。



    小结:

          再一次学习设计模式,跟第一次学大话的时候非常不一样。

    《Head First》中总会给你一些新的理解。比方博客中蓝字标出的文字。假设不能理解这些原则,即使代码实现了也没有多大的收获。所以,博客中并没有给出观察者模式的代码实例。

          学习须要重复,每个重复都让你的认识更加深入。



  • 相关阅读:
    冒泡排序
    Windows 10家庭版升级专业版
    VRRP + MSTP实验
    MSTP多生成树协议
    解决office 2016提示“你的许可证不是正版,并且你可能是盗版软件的受害者。使用正版Office,避免干扰并保护你的文件安全”
    路由器开启ssh实现远程管理
    CentOS 7安装Telnet服务进行远程管理
    CentOS 7开启ssh服务进行远程管理
    华为特有接口Hybrid
    Vlan Mapping
  • 原文地址:https://www.cnblogs.com/mthoutai/p/7366391.html
Copyright © 2011-2022 走看看