观察者模式

第二个模式:观察者模式

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

原文地址:https://www.cnblogs.com/maverick-fu/p/4503527.html