В книге шаблонов проектирования GoF, когда речь идет о части реализации шаблона Observer, указано:
Отображение объектов на их наблюдателей Самый простой способ для субъекта отслеживать наблюдателей, которых он должен
notify должен хранить ссылки на них явно в теме. Однако такое хранение может быть слишком дорогим
когда есть много предметов и мало наблюдателей. Одно из решений - обменять пространство на время, используя
ассоциативный поиск (например, хеш-таблица) для поддержания отображения субъекта-наблюдателя. Таким образом, субъект без
Наблюдатели не несут накладных расходов на хранение. С другой стороны, такой подход увеличивает стоимость доступа
наблюдатели.
Я не вижу, как использование хеш-таблицы увеличит емкость хранилища. В Java для каждого предмета у нас может быть список наблюдателей List<Observer>
. Если к этой теме нет наблюдателей, ссылка на список будет нулевой. Если мы используем хеш-таблицу, Map<Subject, List<Observer>
, у нас все еще есть список, но у нас также есть ссылка на тему, так что этот путь немного больше памяти
неэффективен. Я не знаю, насколько это актуально, но языки, используемые для реализации в книге Gof, - Smalltalk и C ++.