Mi piacerebbe implementare il pattern MVC in una situazione difficile. La difficoltà è che i miei modelli (le entità che generano gli eventi) sono longevi, mentre i Views (i destinatari degli eventi) sono di breve durata. Il mio problema è che, attraverso la connessione tra i due, i modelli di lunga vita mantengono vivi i miei brevi live view, cioè non possono essere raccolti con garbage collection.Come implementare il pattern MVC senza mantenere vivi Views
[MODEL] ------- <weak> -------> [VIEW]
|
<strong>
|
v
[CONTROLLER]
Un modo per ovviare a questo è quello di memorizzare i collegamenti nel modello in un WeakHashMap < View, controller >. Questo essenzialmente fa in modo che la View sia spazzatura, e quando ciò accade, la WeakHashMap lancia anche il Controller corrispondente. Cioè, se il Controller non ha un riferimento (forte) alla Vista - cosa che di solito fa. In questo caso, le viste vengono mantenute in vita attraverso i riferimenti forti finché il modello non viene spostato.
C'è un altro modo per collegare i listener ai miei modelli che non mantengono vivi i miei punti di vista (e i miei controller)?
UPDATE: Per rispondere alla domanda di mdma: il controller mantiene un riferimento alla vista, poiché è necessario aggiornare la vista. Questo riferimento può essere debole, ma mi piacerebbe che i Controllori fossero classi interne anonime della classe View, nel qual caso l'istanza Controller ha un riferimento implicito forte all'istanza View.
Perché il controller hanno un forte riferimento alla vista? – mdma