2016-05-31 7 views
0

Я знаю, что объекты, зарегистрированные для приема сообщений обратного вызова, часто называются слушателями (как в PaintListener, PropertyListener) или наблюдателями (как в ScopeObserver, TileObserver).Существует ли концептуальная разница между слушателем и наблюдателем?

Я также знаю, что оба являются, как правило, реализациями шаблона наблюдателя GoF.

Мой вопрос: при наименовании класса существует ли какое-либо концептуальное различие между его вызовом MyListener и MyObserver?

EDIT: предлагаемый вопрос, на который ссылается как дубликат этого, действительно затрагивает тот же вопрос, но ни один из ответов не разъясняет его для меня. Даже не избранный.

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

Комментарий к исходному вопросу, который, как я понимаю, был опубликован как шутка, звучит так же, как я ожидал ответа: «В первом коде просматривается другой код для движения, а в последнем коде прослушивает другой код для любого шума. "

+1

Возможный дубликат [Шаблон проектирования наблюдателя против «Слушателей»] (http://stackoverflow.com/questions/3358622/observer-design-pattern-vs-listeners) – jaco0646

ответ

2

Помните, что это субъективного точка зрения.

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

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

Применительно к ООП, моя мысль заключается в том, что эти термины, вероятно, будут взаимозаменяемыми. Тем не менее, я бы предпочел, чтобы термин «Наблюдатель» называл объект, который специально просматривал данный/известный набор объектов, и «Слушатель», чтобы назвать объект, который не знает своих целей.

Чтобы проиллюстрировать это более технически:

  • наблюдателя: Mouse наблюдает один (или более) Cat. Mouse - кошка-наблюдатель, который знает всех кошек окрестности.
  • Слушатель: Mouse часы для события cat_in_sight. Mouse является наблюдателем-наблюдателем кошки и не знает всех кошек, которые могут уволить это событие.

Таким образом, этот слушатель имеет меньше обязанностей благодаря промежуточному слою (в данном случае может быть класс Event). Мы могли бы также представить себе, давая эту ответственность кошки:

  • Слушатель: Cat знает все в мышей города и сообщает им всякий раз, когда речь идет рядом. A Mouse - кошка-слушатель, так как он не знает кошек (-> кошек «регистрируют» самих мышей).

Однако у кошек (наблюдаемых) больше ответственности в этом случае.

Я не уверен, был ли я достаточно ясным, надеюсь, это помогло. :-)

 Смежные вопросы

  • Нет связанных вопросов^_^