Observable 和 Observer 的使用被称为观察者模式,Observable 担任被观察者,Observer 担任观察者。
简易实现
小编这里建立了学生向老师发起提问的场景,带着观察者模式思考场景,我们会发现学生应该是担任被观察者,老师担任观察者。
Question:
Student (被观察者):
首先我们会发现 Student 类继承了 Observable 类;
然后在 publishQuestion() 方法里,会发现 setChanged() 和 notifyObservers() 两个方法,稍加思考我们能肯定这两个方法来自父类 Observable,稍后再分析这两个方法。
Teacher (观察者) :
首先我们会发现 Teacher 实现 Observer 类,并重写了 update(Observable o, Object arg) 方法;
第一个参数 Observable 显然是 被观察者,也就是 Student 实例;
第二个参数显然是 被观察者想透传过去的信息,那么自然是 Question;
测试类:
源码分析
测试类有行很关键的代码 student.addObserver(teacher),从语言分析得知是给 student 添加观察者,那么点进去观察下源代码:
我们会发现 Observable 类中维护了一个数组对象 Vector,addObserver() 方法仅仅同步将 Observer的实例添加到数组当中。
然后再分析 Student 类中 publishQuestion() 方法:
setChanged() 方法仅仅是将 Observable 类中的 changed 对象改成 true (默认false),表示可以修改对象或者可以通知观察者了;
notifyObservers(Object arg) 方法才是真正通知观察者的,循环遍历调用观察者的 update() 方法;
由此可见 Observable 和 Observer 的作用主要依靠数组对象 Vector,小编又一次感受到数据结构的重要性。