Я хотел бы реализовать шаблон MVC в трудной ситуации. Трудность состоит в том, что мои Модели (объекты, генерирующие события), долговечны, в то время как Представления (получатели событий) являются недолгими. Моя проблема состоит в том, что посредством соединения между этими двумя, долговечные Модели поддерживают мои недолгие Представления, т.е. они не могут быть собраны "мусор".
[MODEL] ------- <weak> -------> [VIEW]
|
<strong>
|
v
[CONTROLLER]
Способ работать вокруг этого состоит в том, чтобы сохранить соединения в Модели в WeakHashMap <Представление, Контроллер>. Это по существу позволяет Представлению, которое будет собрано "мусор", и когда это произойдет, WeakHashMap выведет соответствующий Контроллер, также. Таким образом, если Контроллер не содержит (сильную) ссылку на Представление - который это обычно делает. В этом случае Представления поддерживаются через сильные ссылки, пока Модель не выходит из объема.
[MODEL] ------- <weak> -------> [VIEW]
| ^
<strong> |
| |
v |
[CONTROLLER] ----------- <strong> ---/
Там другой путь состоит в том, чтобы присоединить слушателей моих моделей, которые не сохранят мои представления (и контроллеры) живой?
ОБНОВЛЕНИЕ: отвечать на вопрос MDMA: Контроллер сохраняет ссылку на Представление, потому что это должно обновить Представление. Эта ссылка может быть слабой, но я хотел бы иметь Контроллеры, чтобы быть анонимными внутренними классами класса Представления, в этом случае Экземпляр контроллера имеет неявную сильную ссылку к экземпляру Представления.