天天看点

Java Observer 观察者

1、API

被观察者

java.util.Observable;

public class Observable extends Object

void addObserver(Observer o);      如果该观察者集合里面没有这个观察者,添加进去。

protected void clearChanged();      把改变的状态清掉,即表示最近没有发生改变,使hasChanged()返回false

int countObserver();                     返回该Observable对象的观察者个数

void deleteObserver(Observer o);   删除一个观察者

boolean hasChanged();                 查看该Observable是否发生了改变

void notifyObservers();                 先调用hasChanged(),若返回true通知该对象所有观察者,然后用clearChanged()清掉状态

void notifyObservers(Object o);     同上,上面观察者update()接收的是null,这里可以返回想要通知的数据。

protected void setChanged();        设置变化,使到调用hasChanged()会返回true

观察者

java.util.Observer

public interface Observer

void update(Observable o, Object arg); 只要发生变化,notifyObservers()就会通知观察者。

2、用法

被观察类需要继承Observable类,在数据改变的地方(如set***();)里加上setChanged(),在需要监听的地方使用notifyObservers(Object o)。

观察者需实现Observer接口,对notifyObservers() 的提醒做出反应。

为Observable添加观察者。

------------------越是喧嚣的世界,越需要宁静的思考------------------ 合抱之木,生于毫末;九层之台,起于垒土;千里之行,始于足下。 积土成山,风雨兴焉;积水成渊,蛟龙生焉;积善成德,而神明自得,圣心备焉。故不积跬步,无以至千里;不积小流,无以成江海。骐骥一跃,不能十步;驽马十驾,功在不舍。锲而舍之,朽木不折;锲而不舍,金石可镂。蚓无爪牙之利,筋骨之强,上食埃土,下饮黄泉,用心一也。蟹六跪而二螯,非蛇鳝之穴无可寄托者,用心躁也。