Observer Design Pattern vs " слушатели"



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



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

708   3  

3 ответов:

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

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

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

существует двусторонняя природа описания наблюдателя в шаблонах проектирования Gamma et. Эл. (Гоф).

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

общие реализации слушателей, кажется, все реагируют на события извне.

Итак, я бы сказал, что слушатель является менее обобщенным случаем наблюдателя.

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

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

Comments

    Ничего не найдено.