我正在尝试使用Observable和Observer更好地理解MVC结构,我试图通过实现比较文件的程序来实现。我希望我的视图显示文件列表和一些统计数据。如何使用不同的数据更新视图?
例如,如果统计信息发生变化,我想将Statistics对象发送到视图,以便它可以更新它的显示。但与此同时,如果文件列表发生变化,我想将ArrayList发送到视图,以便它可以更新它的显示。我是否对两者使用相同的更新方法?如果是这样,那么我是否可以让我的视图看看实例是什么并相应地显示?
答案 0 :(得分:4)
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);
}
}
}
像这样; - )