1、 观察者模式概念 2. 相关类介绍 1)Obervable类 此类表示模型视图范例中的 observable 对象,继承它的类表示应用程序想要观察的对象。一个 observable 对象可以有一个或多个观察者。观察者是实现Observer接口的任意对象。一个 observable 实例改变后,调用 Observable 的 notifyObservers 方法的应用程序会通过调用观察者的 update 方法来通知观察者该实例发生了改变。 方法摘要 void addObserver(Observer o) 如果观察者与集合中已有的观察者不同,则向对象的观察者集中添加此观察者。未指定向多个观察者发送通知的顺序。 protected void clearChanged() 指示对象不再改变,或者它已对其所有的观察者通知了最近的改变,所以 hasChanged 方法将返回 false。notifyObservers 方法自动调用此方法。 int countObservers() 返回 Observable 对象的观察者数目。 void deleteObserver(Observer o) 从对象的观察者集合中删除某个观察者。向此方法传递 null无效。 void deleteObservers() 清除观察者列表,使此对象不再有任何观察者。 boolean hasChanged() 测试对象是否改变。当且仅当在此对象上最近调用了 setChanged 方法时才返回 true;否则返回 false。 void notifyObservers() 如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。每个观察者都有其 update 方法,其调用参数有两个:observable 对象和 null。换句话说,此方法等效于: notifyObservers(null). void notifyObservers(Object arg) 如果 hasChanged 方法指示对象已改变,则通知其所有观察者,并调用 clearChanged 方法来指示此对象不再改变。每个观察者都有其 update 方法,其调用参数有两个:observable 对象和 arg 参数。 arg 可以是任意对象. protected void setChanged() 标记此 Observable 对象为已改变的对象;现在 hasChanged 方法将返回 true。 关于发送通知的顺序: Observable 类中所提供的默认实现将按照其注册的重要性顺序来通知 Observers,但是子类可能改变此顺序,从而使用非固定顺序在单独的线程上发送通知,或者也可能保证其子类遵从其所选择的顺序。 注意:此通知机制与线程无关,并且与 Object 类的 wait 和 notify 机制完全独立。新创建一个 observable 对象时,其观察者集是空的。当且仅当 equals 方法为两个观察者返回 true 时,才认为它们是相同的。 3、观察者模式的组成:可以概括为两个抽象和两个具体。
4、总结 java在GUI编程中大量使用了观察者模式,在jdk中也提供了对观察者模式的支持,它们在java.util包中的Obserable类和Observer接口,其中的实现思路与上面的代码大体相同,所以在理解了上面简单代码的基础上,再去研究jdk对观察者模式所提供的源码就不是什么难事了。
|
|
来自: yxyzhy > 《java/jsp》