如何在不保持Views活动的情况下实现MVC模式

Lór*_*tér 5 java model-view-controller garbage-collection

我想在困难的情况下实现MVC模式.困难在于我的模型(生成事件的实体)是长寿的,而视图(事件的接收者)是短暂的.我的问题是,通过两者之间的连接,长寿模型使我的短暂视图保持活跃,即它们不能被垃圾收集.

  [MODEL] ------- <weak> -------> [VIEW]
     |
 <strong>
     |
     v
[CONTROLLER]
Run Code Online (Sandbox Code Playgroud)

解决此问题的方法是将模型中的连接存储在WeakHashMap <View,Controller>中.这实际上让View被垃圾收集,当发生这种情况时,WeakHashMap也会抛出相应的Controller.也就是说,如果Controller没有对视图进行(强)引用 - 它通常会这样做.在这种情况下,视图通过强引用保持活动状态,直到模型超出范围.

  [MODEL] ------- <weak> -------> [VIEW]
     |                               ^
 <strong>                            |
     |                               |
     v                               |
[CONTROLLER] ----------- <strong> ---/
Run Code Online (Sandbox Code Playgroud)

是否有另一种方法将侦听器连接到我的模型,这些方法不会让我的视图(和控制器)保持活动状态?

更新:回答mdma的问题:Controller保留对View的引用,因为它需要更新View.这个引用可能很弱,但是我想让Controllers成为View类的匿名内部类,在这种情况下,Controller实例具有对View实例的隐式强引用.

oop*_*ase 0

在这里,您已经获得了 MVC 模式的出色实现。您的问题可能有解决方案。