我觉得你别想的太复杂。
观察者模式需要有一个主题,还有一个或多个观察者。
在主题类中有一个观察者的集合。
当调用主题类的某些方法时,自动循环这个集合,调用观察者的方法。
举个例子:
public class CountSubject implements ICountSubject {
private Listlist;
CountSubject() {
list = new ArrayList();
}
@Override
public void count(int num) {
for (int i=0;iSystem.out.println(this.getClass().getName() + "-->" + i);
this.notifyObserver(i);
}
}
public void addObserver(Observer obs) {
this.list.add(obs);
}
public boolean removeObserver(Observer obs) {
return this.list.remove(obs);
}
public void removeAllObservers() {
this.list.clear();
}
public void notifyObserver(int i) {
for (int a=0;aObserver o = list.get(a);
o.update(i);
}
}
}
在客户端调用时,先要初始化一个或多个观察者,然后添加到主题对象。
然后调用主题对象的方法。在主题对象的方法中会自动调用观察者的方法。