观察者模式
第二个模式:观察者模式
1.1问题引入
气象站布告栏,对于注册的用户会实时的报告气候的变化,对于取消注册的用户将不会在推送消息。如下面的模式所示:
推出:出版者+订阅者=观察者模式
出版者=“主题(Subject)”, 订阅者=“观察者(Observer)”
总结:
观察者模式:定义了对象之间一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖着都会受到通知并自动更新。
1.2解决方案1
使用观察者模式来解决这个问题:下图是观察者模式的类图:
观察者模式的特点:
设计原则:为了交互对象之间的松耦合设计而努力
具体实现:如下图是气象站的具体类图:
实现可以见详细代码,需要注意的一点就是:在实现观察者类时需要注意将主题(Subject)作为参数加入构造器中,即构造器需要主体对象作为注册之用。
1.3观察者模式的应用1:
1.JAVA API内置的有观察者模式,分别是java.util.Observer和java.util.Observable。
如下图:
运作过程:
1.如何将对象编程观察者:实现观察者接口,然后调用Observable对象的addObserver()方法。当不想当观察者时,调用deleteObserver()方法就可以了。
2.可观察者如何送出通知:首先扩这Observable接口产生“可观察者”类,然后,需要两个步骤:
(1)先调用setChanged()方法,标记状态已经改变的事实。
(2)然后调用两种notifyObservers()方法的一个:notifyObservers()或者notifyObservers(Object arg)
3.观察者如何接收到通知:同以前一样,观察者实现了更新的方法,但是方法的签名不太一样:update(Observable o, Object arg)
具体代码见源代码;o(∩_∩)o
1.4观察者模式的应用2:
如题,源代码如下: