2014-12-09 2 views
0

В моей игре у меня есть класс Population, который содержит набор граждан. Каждая совокупность регистрируется с помощью PopulationManager после создания экземпляра. PopulationManager содержит ссылку на все Population объектов в игре; он используется для анализа популяций и быстрого извлечения популяций.Отмена регистрации объекта из диспетчера объектов при сборке мусора (Java)

Многие структуры в моей игре могут содержать Population. Ex. a Town содержит Population. Когда город разрушен, я хочу, чтобы объект населенности также переставал существовать. Однако, даже если я уничтожу город, его объект Population остается, так как есть ссылка на него в PopulationMananger.

Есть ли способ удаления ссылки на Population объекта в PopulationManager, когда его Town уничтожается без явного вызова какой-то дерегистрировать (населения) метода в PopulationManager? Или я буду вынужден удалять ссылку вручную каждый раз, когда город будет уничтожен?

+2

Посмотрите шаблон Observer. –

+0

@SotiriosDelimanolis Спасибо. При первоначальном поиске в Google это похоже на то, что мне нужно. –

+1

@mario_sunny Не совсем :) Это просто причудливый способ назвать «дерегистер» - то, чего вы хотели избежать. Что вам действительно нужно, это 'java.lang.ref.WeakReference'. – Dima

ответ

0

Попробуйте использовать weakHashMap с ключом как городским объектом и значением в качестве объекта популяции.

The WeakHashMap - это просто карта anotehr, которая хранит следы слабых ссылок, т. Е. В вашем случае, если вообще объект города назначен null, weakHashMap гарантирует, что при сборке мусора запись, соответствующая этому городскому объекту, удален.

Таким образом, вы должны заботиться только об объекте города, остальное будет Doen самого WeakHashMap

Смежные вопросы