4)虽然观察者模式可以随时使观察者知道所观察的对象发生了变化,但是观察者模式没有相应的机制使观察者知道所观察的对象是怎么发生变化的。
示例:Android
/**
* 目标
* @author administry
*
*/
public interface Subject {
public void attach(Observer observer);
public void detach(Observer observer);
void notifyObservers();
}
/**
* 观察者
*/
public interface Observer {
public void update();
}
/**
* 具体目标
*/
public class ConcreteSubject implements Subject {
private Vector observersVector = new java.util.Vector();
public void attach(Observer observer) {
observersVector.addElement(observer);
}
public void detach(Observer observer) {
observersVector.removeElement(observer);
}
public void notifyObservers() { // 遍历观察者向量,通知每个观察者
Enumeration enumeration = observers();
while (enumeration.hasMoreElements()) {
((Observer) enumeration.nextElement()).update();
}
}
public Enumeration observers() {
return ((Vector) observersVector.clone()).elements();
}
}
/**
* 具体观察者
*/
public class ConcreteObserver implements Observer {
public void update() {
// here,一般来说Observer还有一个指向主题的引用,在这个方法中可以通过它,来判断自己关注的数据是否发生变化,并作出相应的行动
}
}