2

我试图在使用 Observable 和 Observer 时更好地理解 MVC 结构,我试图通过实现一个比较文件的程序来做到这一点。我希望我的视图显示文件列表和一些统计数据。如何使用不同的数据更新视图?

例如,如果统计信息发生变化,我想将 Statistics 对象发送到视图,以便它可以更新它的显示。但同时,如果文件列表发生变化,我想将 ArrayList 发送到视图,以便它可以更新它的显示。我是否对两者使用相同的更新方法?如果是这样,那么我是否让我的视图查看 instanceof 是什么并相应地显示?

4

1 回答 1

4

Swing 框架是 MVC 如何工作的一个很好的例子。每个状态更改都会触发一种事件,并且想要了解这些更改的对象实现侦听器(又名观察者)。

因此,总而言之,您应该创建一个名为 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);
        }
    }
}

像这样的东西;-)

于 2012-09-14T16:33:44.433 回答