感觉设计模式真的是只有用到的时候才会知道它有多重要,对着书看上个几十遍也许都不知道它讲的是什么,观察者模式还是蛮有用的,以前刚学java的时候写过一个简单的聊天室程序,里面就用到了观察者模式,用户提交消息至一个队列,队列每次增加一条消息都会调用函数把它显示出来,最近做项目的时候遇到了个差不多的东西,又要用到观察者模式,先写了个小小的test程序,很简单明了的那种,以后忘了的话也就不用在网上找来找去找一大堆乱七八糟的东西了:
package test;
import java.util.Observable;
import java.util.Observer;
public class TestObservable extends Observable{
private boolean isEmpty;
public TestObservable()
{
super();
}
public void changeState(boolean state)
{
if(state == true)
{
setChanged();
notifyObservers();
}
}
/**
* @return the isEmpty
*/
public boolean isEmpty() {
return isEmpty;
}
/**
* @param isEmpty the isEmpty to set
*/
public void setEmpty(boolean isEmpty) {
this.isEmpty = isEmpty;
}
public static void main(String[] args)
{
TestObservable exp = new TestObservable();
Observer observer = new TestObserver();
exp.addObserver(observer);
exp.changeState(true);
exp.changeState(false);
exp.changeState(true);
}
}
继承Observable类,我就奇怪为什么不是实现一个接口呢,设计上有缺陷啊.很简单,主要就是setChanged()函数来传递信息,不多解释,这个类相当于被观察者,也就是发生变化的对象~~~
package test;
import java.util.Observable;
import java.util.Observer;
public class TestObserver implements Observer {
public void update(Observable observable, Object arg)
{
if(observable instanceof TestObservable)
{
display();
}
}
public void display()
{
System.out.println("state has changed!");
}
}
这个类更简单了,观察者就是当被观察者发生变化时自己能做出相应反应的对象,通过update()函数来实现,还有一点就是所有观察者要在被观察者中注册,就这么简单~~~