В чем разница между Event Listeners & Handlers в Java?

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

Мой вопрос в том, в каком случае мы используем прослушиватели, и в каком случае мы используем обработчики для событий?

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

EventHandler – это способ различать наблюдаемые события и события ui.

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

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

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

Попробуйте зарегистрировать Dialogs 1..4 в качестве слушателей и как-то запустить Sender для OnUpdatedDataEvent?

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

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

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

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

Пример:

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

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

Это семантика.

  • Слушатель – это интерфейс.
  • Адаптер является classом, который реализует конкретный интерфейс и обеспечивает пустую реализацию для своих методов. Это помогает, если вам не нужно реализовывать все методы интерфейса.
  • Обработчик реализует несколько интерфейсов или делегирует вызовы нескольким интерфейсам.
  • Получение событий из базы данных
  • Планировщик событий MySQL в определенное время каждый день
  • Событие буфера обмена C #
  • Окончательный способ запуска событий нажатия клавиш с помощью jQuery
  • Плохо ли не отменять регистрацию обработчиков событий?
  • Есть ли недостаток в добавлении анонимного пустого делегата в объявление события?
  • Остановить распространение событий мыши в угловом
  • Как разобрать JSON с Objective-C?
  • AddEventHandler с использованием отражения
  • Как передать событие методу?
  • C #: создание унаследованного события
  • Interesting Posts

    Android v21 Theme.Appcompat цветной акцент игнорируется, никаких дополнений в диалоговом окне

    Должен ли я получить запись базы данных на уровне слоев Struts2?

    Установка ядер процессора не зависит от всех потоков, не указанных (предпочтительно в Windows 7)

    Улучшена ли дефрагментация, связанная с улучшением производительности диска?

    Как скопировать / вставить символы табуляции через буфер обмена в сеанс терминала на gnome / ubuntu

    Разрешить пользователю вводить HTML в ASP.NET MVC – ValidateInput или AllowHtml

    Google Chrome работает медленнее до localhost

    Почему защищенный конструктор вызывает ошибку в этом коде?

    Получите IPrincipal от токена носителя OAuth в OWIN

    Изменение типа сети от Неопознанной сети до частной сети в соединении с OpenVPN

    как остановить создание xcode5.1 для 64-битных

    Tmux: найдите «мое» окно, проверьте, активен ли он

    Как оптимизировать для-понимания и петель в Scala?

    Бесконечный цикл в C / C ++

    Как отключить ipv6 для определенного интерфейса в Linux?

    Давайте будем гением компьютера.