zoukankan      html  css  js  c++  java
  • 观察者模式

    第二个模式:观察者模式

    1.1问题引入

    气象站布告栏,对于注册的用户会实时的报告气候的变化,对于取消注册的用户将不会在推送消息。如下面的模式所示:

    wps2CF6.tmp

    推出:出版者+订阅者=观察者模式

    出版者=“主题(Subject)”, 订阅者=“观察者(Observer)”

    总结:

    观察者模式:定义了对象之间一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖着都会受到通知并自动更新。

    1.2解决方案1

    使用观察者模式来解决这个问题:下图是观察者模式的类图:

    wpsF7F3.tmp

    观察者模式的特点:

    wps708D.tmp

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

    具体实现:如下图是气象站的具体类图:

    wpsD5B6.tmp

    实现可以见详细代码,需要注意的一点就是:在实现观察者类时需要注意将主题(Subject)作为参数加入构造器中,即构造器需要主体对象作为注册之用。

    1.3观察者模式的应用1:

    1.JAVA  API内置的有观察者模式,分别是java.util.Observer和java.util.Observable。

    如下图:

    wpsD8F2.tmp

    运作过程:

    1.如何将对象编程观察者:实现观察者接口,然后调用Observable对象的addObserver()方法。当不想当观察者时,调用deleteObserver()方法就可以了。

    2.可观察者如何送出通知:首先扩这Observable接口产生“可观察者”类,然后,需要两个步骤:

    (1)先调用setChanged()方法,标记状态已经改变的事实。

    (2)然后调用两种notifyObservers()方法的一个:notifyObservers()或者notifyObservers(Object arg)

    3.观察者如何接收到通知:同以前一样,观察者实现了更新的方法,但是方法的签名不太一样:update(Observable o, Object arg)

    wps5784.tmp

    具体代码见源代码;o(∩_∩)o 

    1.4观察者模式的应用2:

    wpsB686.tmp

    如题,源代码如下:

    wps3009.tmp

  • 相关阅读:
    新年后的第一个学习总结
    2021/02/07周学习总结
    内网穿透
    有效的括号
    实现一个简单的模板字符串替换
    二叉树的最大深度
    前端性能和错误监控
    前端缓存
    display: none; opacity: 0; visibility: hidden;
    发布订阅模式与观察者模式
  • 原文地址:https://www.cnblogs.com/maverick-fu/p/4503527.html
Copyright © 2011-2022 走看看