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