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