我覺得妳別想的太復雜。
觀察者模式需要有壹個主題,還有壹個或多個觀察者。
在主題類中有壹個觀察者的集合。
當調用主題類的某些方法時,自動循環這個集合,調用觀察者的方法。
舉個例子:
public?class?CountSubject?implements?ICountSubject?{private?List<Observer>?list;
CountSubject()?{
list?=?new?ArrayList<Observer>();
}
@Override
public?void?count(int?num)?{
for?(int?i=0;i<num;i++)?{
System.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;a<list.size();a++)?{
Observer?o?=?list.get(a);
o.update(i);
}
}
}
在客戶端調用時,先要初始化壹個或多個觀察者,然後添加到主題對象。
然後調用主題對象的方法。在主題對象的方法中會自動調用觀察者的方法。