Шаблон разработки наблюдателя по сравнению со “слушателями”

Мне кажется, что шаблон разработки The Observer, как описано в GOF является действительно тем же самым как Слушателями, найденными в различных инструментариях. Есть ли различие между понятиями или Слушатели и Наблюдатели действительно то же самое.

(Я не ищу определенной реализации языка программирования, я просто хочу понять различие (если таковые имеются) с точки зрения дизайна. Да, я знаю, что существует несколько ответов на подобные вопросы на SOF, но они базированы в конкретных вопросах об определенных языках - я ищу ответ дизайна, не ответ языка.)

128
задан erickrf 2 July 2013 в 20:19
поделиться

2 ответа

Относится ли термин «слушатель» к шаблону наблюдателя или нет, будет зависеть от контекста. Например, «Слушатели событий» Java Swing являются частью реализации паттерна «Наблюдатель», а «Слушатели трассировки» .Net - нет.

Авторы фреймворков нередко присваивают разные имена компонентам, участвующим в данной реализации шаблона, но официальные имена шаблонов обычно используются при обсуждении самих шаблонов.

Что касается дизайна, реализация данного шаблона часто зависит от используемого языка и платформы. Таким образом, конкретная реализация шаблона Observer в данной структуре (которая может использовать термин «слушатель» для описания роли ConcreteObserver) может немного отличаться от описанной в книге Design Patterns.

56
ответ дан 24 November 2019 в 00:40
поделиться

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

Я знаю, что вам не нужен конкретный ответ на конкретном языке, но довольно сложно говорить об этом абстрактно. Поэтому, если бы мне пришлось исследовать это в .NET, я был бы склонен открыть сборку, содержащую прослушиватель в .NET Reflector, что позволит мне разобрать сборку и проверить ее логику на соответствие шаблону проектирования.

4
ответ дан 24 November 2019 в 00:40
поделиться
Другие вопросы по тегам:

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