MVC如何工作的一個很好的例子是在Swing框架中。每一次狀態改變都會觸發一種事件,而想要了解這些改變的對象實現了聽衆(又名觀察者)。
所以,總的來說,你應該創建一個名爲StatisticsListener一個接口,這樣的:
public interface StatisticsListener {
public void statisticsChanged(StatisticsEvent evt);
}
與事件StatisticsEvent:
public class StatisticsEvent {
private final Statistics changedStatistics;
public StatisticsEvent(Statistics changedStatistics){
this.changedStatistics = changedStatistics;
}
public Statistics getChangedStatistics(){
return this.changedStatistics;
}
}
...在你的類來處理統計,你點燃事件:
public class ClassThatHandlesStatistics {
private final List<StatisticsListener> listeners = new CopyOnWriteArrayList<StatisticsListener>();
public void doSomething(){
Statistics changed ... //do your logic
fireStatisticsChanged(new StatisticsEvent(changed));
}
protected void fireStatisticsChanged(StatisticsEvent evt){
for (StatisticsListener listener : listeners){
listener.statisticsChanged(evt);
}
}
}
這樣的事情;-)
因此,如果我想要一個名爲FileCompare的模型,我會讓它調用fireStatisticsChanged和fireFileListChanged嗎?然後,無論哪一個相應的觀點碰巧看到一個或另一個將獲得更新提供的視圖實現了監聽器和註冊... yada yada。它是否正確? – Geoff
是的,是的=) –
真棒,謝謝! – Geoff