在设计模式中,有一种模式叫做“观察者模式”,具体的UML图可以查看下《Head First 设计模式》,CSDN上就有哈,不过,大家请尊重版权。
JAVA中,提供了两个类(一个类Observable和一个接口Observer),方便实现观察者模式。JAVA具体代码如下:
import java.util.*;
/*
观察者,主要接收数据,通过update方法
*/
class ObserverTest implements Observer
{
private Observable obs;
public ObserverTest(Observable o)
{
obs = o;
obs.addObserver(this);
}
public void update(Observable o, Object arg)
{
String s = (String)arg;
show(s);
}
public void show(String s)
{
System.out.println(s);
System.out.println("?????????????");
}
}
import java.util.*;
/*
被观察者类,这是数据来源,当数据改变时,此类负责通知观察者
*/
class ObservableTest extends Observable
{
private String message=null;
public void ChangeMessage(String s)
{
message = s;
//一定要注意,下面两句话的调用顺序,不然会没有结果,
//那时因为,notifyObservers函数内部会判断数据是否发生改变,这个需要通过setChanged方法进行设置
setChanged();
notifyObservers(message);
}
public static void main(String[] args)
{
ObservableTest ob = new ObservableTest();
ObserverTest ob1 = new ObserverTest(ob);
ObserverTest ob2 = new ObserverTest(ob);
ObserverTest ob3 = new ObserverTest(ob);
ObserverTest ob4 = new ObserverTest(ob);
System.out.println(ob.countObservers());
System.out.println("\n message changed once!");
ob.ChangeMessage("1111111");
System.out.println("\n message changed twice!");
ob.ChangeMessage("2222222");
}
}