java - MVC 与观察者模式

标签 java model-view-controller observer-pattern

我正在使用 MVC 模式,该模式也使用 Observer 模式。概念如下:

________                 _________                ______________
| VIEW | -- observes --> | MODEL | <-- changes -- | CONTROLLER | 
--------                 ---------                --------------

所以我认为我的概念非常常见。每次从Model 中观察到的对象发生更改时,View 都会进行重新创建更新。就我而言,我有很多对象非常频繁地更改,这对用户界面的性能产生了不良影响。由于对象及其呈现方式可能存在多种变化,我总是必须在更新时重新创建整个View,而不是更新特定组件。为了提高性能,我实现了一个更新 View 请求队列,以确保更新仅完成,例如最大限度。每 50 毫秒一次。这非常有效,并将性能提高到了一个很好的水平。

我现在的问题是,是否有更好的方法来处理许多暂时相互重叠的更新 View 请求。在我看来,我的解决方案是将请求排队并减少到可接受的水平,这似乎是一个糟糕的解决方法。有更好的概念吗?

最佳答案

您在图表中描绘的模式并不完全是 MVC,而是 MVVM(模型、 View 、ViewModel)。
使用队列来限制更改是一种完全有效的方法。在许多情况下,试图以比用户感知的速度更快的速度更新 View 是没有用的。

另一方面,与其每次都创建新的 View 对象可能会很昂贵。您可以应用的另一个技巧是拥有一个可变 View 部件池,根据需要,将它们重新绑定(bind)到某些模型实体,并根据需要显示或隐藏它们。根据您的具体用例,这还可以帮助您提高全局性能。

关于java - MVC 与观察者模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22832870/

相关文章:

Java hibernate 有条件地将注释应用于字段?

javascript - SproutCore 与 Cappuccino

swift - 如何将模型的 (json) 值发送到 View Controller ?

c++ - Python 的 C++ 发布订阅/观察者模式?

Swift,带闭包的观察者模式

c# - 我可以/应该 Linqify 这个 foreach/if/foreach/if/invoke 代码吗?

Java:在哪里可以找到 WindowsAccessbridge 的源代码?

java - java中Char的值是多少?

Java 6 更新 25 虚拟机崩溃 : insufficient memory

java - 子 GUI 组件应该如何访问其父组件(使用 MVC)?