gpt4 book ai didi

java - MVC - 一个 View 可以观察一个对象吗?

转载 作者:行者123 更新时间:2023-11-30 07:22:53 25 4
gpt4 key购买 nike

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

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

最佳答案

关于 MVC 如何工作的一个很好的例子是在 Swing 框架中。每个状态变化都会触发一种事件,而想要了解这些变化的对象会实现监听器(也称为观察者)。

因此,总而言之,您应该创建一个名为 StatisticsListener 的接口(interface),如下所示:

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);
}
}
}

像这样的东西 ;-)

关于java - MVC - 一个 View 可以观察一个对象吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12428371/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com