Как мне создать репозиторий классов в Java и действительно ли он мне нужен? - PullRequest
2 голосов
/ 18 марта 2010

У меня есть большое количество объектов, которые идентифицируются по именам (строкам). Итак, я хотел бы иметь своего рода отображение от имени объекта к экземплярам класса.

Мне сказали, что в этой ситуации я могу использовать класс "хранилище", который работает следующим образом:

Server myServer = ServerRepository.getServer("NameOfServer");

Таким образом, если объект (сервер) уже существует с «NameOfServer», он будет возвращен «getServer». Если такого объекта еще не существует, он будет создан и возвращен "getServer".

Итак, мой вопрос, как запрограммировать такой класс "репозитория"? В этом классе я должен быть в состоянии проверить, существует ли экземпляр данного класса так, чтобы у него было заданное значение данного поля. Как мне это сделать? Мне нужно иметь своего рода цикл над всем существующим объектом данного класса?

Другая часть моего вопроса заключается в том, почему я не могу использовать ассоциативные массивы (ассоциативный контейнер, отображение, отображение, словарь, конечное отображение)? (Я не уверен, как вы называете это в Java). Более подробно, у меня есть «массив», который отображает имена объектов на объекты. Поэтому, всякий раз, когда я создаю новый объект, я добавляю новый элемент в массив: myArray["NameOfServer"] = new Server("NameOfServer").

1 Ответ

3 голосов
/ 18 марта 2010

Я бы сам реализовал это с ассоциативным контейнером, однако лучше скрыть детали реализации за соответствующим интерфейсом. Это облегчает использование для клиентов и позволяет со временем изменять / настраивать реализацию.

Например, вы можете начать с простого HashMap и узнать позже, что по какой-то причине TreeMap будет лучше. Или вы понимаете, что со временем на карте накапливается множество неиспользуемых объектов, на которые больше никто не ссылается, но которые невозможно собрать, поскольку на карте хранится ссылка на них. Таким образом, вы можете решить перейти на WeakHashMap. Если ваша реализация скрыта за интерфейсом, вы можете вносить эти изменения, не затрагивая клиентов.

...