设计模式——观察者模式
被观察者(Observable)是一个类,使用继承extends,因为它无需子类再去实现什么东西。观察者(Observer)是一个接口,使用实现implements,因为它需要子类去实现update函数,这个函数在被观察者发生变化时被执行。
一般可理解为,Observable是一个中心数据库,Observer是许多个视图,用于从各个方面展示数据库的数据。
//SimpleObserver.java
package org.shu.pxz;
import java.util.Observable;
import java.util.Observer;
public class SimpleObserver implements Observer
{
public SimpleObserver(SimpleObservable simpleObservable){
simpleObservable.addObserver(this);//由于是被观察者去通知观察者,那么注册就需要调用被观察者的函数
}
public void update(Observable observable , Object data){
System.out.println("Data has changed to " + ((SimpleObservable) observable).getData());
}
}
//SimpleObservable.java
package org.shu.pxz;
import java.util.Observable;
public class SimpleObservable extends Observable
{
private int data = 0;
public int getData(){
return data;
}
public void setData(int i){
if(this.data != i) {
this.data = i;
setChanged();//Observable类的成员函数
//只有在setChange()被调用后,notifyObservers()才会去调用update(),否则不调用
notifyObservers();//Observable类的成员函数
}
}
}
//SimpleTest.java
import org.shu.pxz.SimpleObservable;
import org.shu.pxz.SimpleObserver;
public class SimpleTest
{
public static void main(String[] args){
SimpleObservable doc = new SimpleObservable ();//先有中心数据库,再有视图
SimpleObserver view = new SimpleObserver (doc);//拿视图向中心数据库注册
doc.setData(1);
doc.setData(2);
doc.setData(2);
doc.setData(3);
}
}
//output
Data has changed to 1
Data has changed to 2
Data has changed to 3