Требуется объектно-ориентированный совет - PullRequest
1 голос
/ 03 августа 2010

У меня есть ситуация, описанная ниже

Класс модели (M), который содержит хэш-карту (h) в качестве частного поля (выставлены методы получения и установки).
Новый класс (A) с доступом к (M) должен изменить хэш-карту (M) (h)

, что из следующего может быть лучшим способом достижения этого

а.использовать (H), получатель.т.е. (M) .getMap (). put (a, b) каждый раз, когда я хочу заполнить эту карту

b.создайте локальную карту, заполните ее и затем используйте (M) .setMap (локальный хеш)

c.добавить метод в (M) addMapEntry (ключ, значение) {(h) .put (ключ, значение);} и вызовите (M) .addMapEntry в (A)

a.кажется несколько небезопасным, поскольку мы выставляем закрытый ссылочный объект.б.будет потреблять больше памяти, и, следовательно, я всегда предпочитаю использовать c.

Может кто-нибудь сказать, есть ли лучшая альтернатива для достижения этой цели?

Ответы [ 2 ]

2 голосов
/ 03 августа 2010

с.

Хеш-карта представляет часть состояния M, поэтому M должен контролировать, что в нем. Вызов методов на M тогда свободен для добавления записей на карту, их удаления или даже полного удаления карты, в зависимости от семантики операции, и все без того, чтобы клиенты даже знали, что под всем этим есть хэш-карта. Вот суть инкапсуляции.

0 голосов
/ 03 августа 2010

(С), без сомнения.

A, по крайней мере, связывает вашу реализацию "внутреннего" хранилища с тем, чтобы он всегда основывался на HashMap. Какая разница? Может быть, завтра это будет таблица БД, файл свойств или список ...

Б слишком ужасно, чтобы созерцать. Та же проблема А, усугубленная тем фактом, что, предполагая, что класс «контейнер» может быть вызван более чем одним клиентом, вы рискуете перезаписать параллельные изменения, даже если они были направлены на ключи, к которым вы не собираетесь прикасаться. *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...