Объектно-ориентированная подсказка необходима

Мне описали ситуацию ниже

Образцовый класс (M), который содержит hashmap (h) как частное поле (метод считывания и выставленный метод set).
Новый класс (A) с доступом к (M) должен изменить (M) hashmap (h)

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

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

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

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

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

Кто-либо мог сказать, существует ли какая-либо лучшая альтернатива для достижения этого??

Спасибо.

1
задан Manish Mulani 3 August 2010 в 11:11
поделиться

2 ответа

c.

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

2
ответ дан 2 September 2019 в 22:29
поделиться

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

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

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

0
ответ дан 2 September 2019 в 22:29
поделиться
Другие вопросы по тегам:

Похожие вопросы: