it-swarm.com.ru

В чем разница между прослушивателями событий и обработчиками в Java?

В общих чертах Java, есть слушатели и обработчики событий.
Я имею в виду, что я использую их по незнанию, просто в зависимости от того, что доступно в API. 

У меня вопрос: в каком случае мы используем слушателей и в каком случае мы используем обработчики событий?

Какая разница между ними? Характеристики??

Я искал причины и не мог найти правильное объяснение Java. 

76
jlc488

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

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

Пример:MouseListener в Java API.

Обработчик - это объект, который отвечает за обработку определенных событий. Типичным сценарием может быть предоставление обработчика для конкретного события/задачи в качестве аргумента для конструктора или set обработчика с помощью метода setXyzHandler. Другими словами, у вас обычно есть обработчик one для каждого типа события.

Пример:MemoryHandler в Java API.

54
aioobe

Самое основное отличие - это ассоциация

  • Слушатель связан с источником события (например, клавиатура)
  • Обработчик связан с событием (например: keydown)

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

30
Swapnil

Вот как я это вижу:

A слушатель наблюдает за событием, которое будет запущено. Например, KeyListener ожидает KeyEvents, MessageListener ожидает поступления сообщений в очередь и так далее.

обработчик отвечает за взаимодействие с событием. Обычно слушатели и обработчики идут рука об руку. Например, KeyListener сообщает ExitHandler, что «была нажата буква Q», и обработчик выполняет логику, такую ​​как очистка ресурсов и корректный выход из приложения. Аналогично ButtonClickListener сообщит тому же ExitHandler, что «была нажата кнопка« Выход »». Итак, в этом случае у вас есть два разных события, два разных слушателя, но один обработчик.

20
dogbane

Слушатель, слушает события, которые являются объектами значений данных, которые описывают событие. Когда произошло событие, и порядок событий часто важен. Нажатие клавиши «0» и «1» отличается от «1» и «0».

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

4
Peter Lawrey

Я думаю, что разница невелика, потому что конкретный Слушатель тоже является обработчиком событий или, по крайней мере, имеет метод, который можно считать обработчиком событий ........ То есть конкретный Слушатель обрабатывает или управляет реакцией на событие после получения объект события (из источника-события) со всей полезной информацией о только что произошедшем событии (об источнике-событии) . Поскольку этот слушатель должен реализовать интерфейс xxxListener, который заставляет его реализовать по крайней мере один метод, который в свою очередь выполняется объектом-источником события при возникновении события, поэтому сам слушатель можно считать обработчиком, а точнее, метод интерфейса слушателя, реализованный объектом слушателя, можно считать настоящим обработчиком события .Так что я рассматриваю обработчик событий как просто код, который выполняется в ответ на событие . Это отличается от объекта Listener, который является элементом более абстрактной концепции, такой как шаблон проектирования Observer . Это мой личный взгляд на предмет.

3
Samaritan

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

3
oskar

Слушатель - это объект, который уведомляется, когда происходит событие, и он имеет 2 основных требования - 1 - он должен быть зарегистрирован в одном или нескольких источниках для получения уведомлений о конкретных типах события 2 - он должен реализует методы для получения и обработки этих уведомлений .... Обработчик отвечает за обработку событий.

3
naren

Концептуально это одно и то же - объект, который выполняет какое-то действие в ответ на событие пользовательского интерфейса. Как правило, в Swing эти объекты называются «обработчиками» на уровне внешнего вида (для обработки низкоуровневых событий виджетов) и «слушателями» на более абстрактном уровне пользовательского интерфейса (где вы будете реализовывать логику своего приложения). ).

2
kprevas

EventHandler представлен в JavaFX для всех элементов управления пользовательского интерфейса. Принимая во внимание, что Слушатель заимствован для Observables, таких как свойства.

EventHandler - это способ различать наблюдаемые события и события пользовательского интерфейса.

0
sotondolphin

Я пытался разобраться во всей информации, и я потерян. Я посмотрел на Delphi (Pascal), C, C++, Java ... ничего не ясно. Итак, через месяц это проблема, как я ее вижу. Я могу быть совершенно не в курсе, поэтому, пожалуйста, скажите мне ... вежливо, пожалуйста. 

Один отправитель события, один перехватчик, пока отправитель регистрирует перехватчика. У меня есть 4 диалоговых окна, которые необходимо обновлять каждый раз, когда файл (код обработки которого находится в другом модуле, чем 4 диалоговых окна) изменяется. Я подумал об обновлении каждого по-старому, но потом я посмотрел на события Delphi и обработку сообщений. Посмотрим: 

Файл F (Отправитель) закончил чтение и должен уведомить Диалоги 1..4 о том, что теперь есть данные для их отображения и пользователь для игры. Что лучше? 

Попробуйте зарегистрировать диалоги 1..4 в качестве слушателей, и отправитель должен как-то вызвать OnUpdatedDataEvent? 

Попробуйте отправить сообщение через систему, надеясь, что Dialogs 1..4 его поймает? 

Обратите внимание, что событие связывает вещи, в то время как обмен сообщениями - нет ... и их трудно отлаживать. 

И мне интересно, как блок кода File сможет зарегистрировать 4 слушателя (диалоговые окна)?

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

Пример:

Say File F - это список языков. Теперь DialogBox 1 что-то делает со списком (например, добавляет новый язык); это поле со списком обновляет F-файл; это в свою очередь вызывает DataUpdatedEvent. 4 диалоговых окна содержат, скажем, TComboBox, которые отображают список языков, когда они всплывают. Я хочу, чтобы 4 поля отметили изменения и обновили содержимое своего собственного поля со списком, используя только что обновленный файл ... не беспокоясь о том, как эти поля со списком знают, что им нужно обновить свое содержимое. Если он работает так, как предполагалось, параметр Sender будет перенесен, и диалоговое окно, которое вызвало dataUpdateEvent, будет пропущено, поскольку оно уже будет обновлено. В конце концов, если sender = self, то переход к следующему обработчику событий должен быть простым в реализации. 

Все это потому, что я хочу тренировать свой мозг ... чтобы предотвратить болезнь Альцгеймера, но не очень успешно, я мог бы добавить. 

0
Christian Martin