Jaka jest różnica między słuchaczami zdarzeń i programami obsługi w Javie?

Ogólnie rzecz biorąc, w Javie istnieją słuchacze i programy obsługi zdarzeń.
Chodzi mi o to, że używam ich nieświadomie, tylko to, co jest dostępne w API.

Moje pytanie brzmi: w jakim przypadku korzystamy ze słuchaczy, a w jakim z obsługi zdarzeń?

Jaka jest różnica między nimi? Cechy charakterystyczne??

Szukałem powodów i nie mogłem znaleźć odpowiedniego wyjaśnienia dla Javy.

Author: Ankur, 2011-01-18

11 answers

Nie ma formalnie zdefiniowanej różnicy między słuchaczami a użytkownikami. Niektórzy ludzie prawdopodobnie twierdzą, że są wymienne. Dla mnie mają jednak nieco inne znaczenie.

Słuchacz jest obiektem, który zapisuje zdarzenia ze źródła. Cf. wzór obserwatora . Zazwyczaj możesz mieć wielu słuchaczy zapisujących się do każdego typu zdarzenia i są one dodawane za pomocą metod addXyzListener.

Przykład: The MouseListener w Java API.

Handler jest obiektem odpowiedzialnym za obsługę określonych zdarzeń. Typowym scenariuszem byłoby dostarczenie obsługi dla określonego zdarzenia/zadania jako argumentu konstruktorowi lub ustawienie obsługi za pomocą metody setXyzHandler. Innymi słowy, zwykle masz jedną obsługę dla każdego typu zdarzenia.

przykład: The MemoryHandler W Java API.

 62
Author: aioobe,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-09-21 11:57:34

Najbardziej podstawową różnicą jest skojarzenie

  • Listener jest skojarzony z źródłem zdarzeń (np: tablica kluczy)
  • Handler jest powiązany ze zdarzeniem (Ex: keydown)

Ogólnie rzecz biorąc, istnieje tylko jeden centralny Menedżer obsługi, który zarządza wszystkimi zdarzeniami, podczas gdy w przypadku słuchacza każda jednostka, która chce słuchać, będzie musiała zarządzać własną kolekcją słuchaczy

 33
Author: Swapnil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-09-29 05:35:12

Tak to widzę:

A słuchacz obserwuje zdarzenie, które ma zostać wywołane. Na przykład KeyListener czeka na KeyEvents, a MessageListener czeka na wiadomości, które pojawią się w kolejce i tak dalej.

Opiekun jest odpowiedzialny za obsługę zdarzenia. Zwykle słuchacze i opiekunowie idą w parze. Na przykład, KeyListener mówi ExitHandler, że "litera Q została naciśnięta", a obsługa wykonuje logikę, taką jak czyszczenie zasobów i opuszczanie aplikacji z wdziękiem. Podobny ButtonClickListener powie temu samemu ExitHandler, że "Przycisk Wyjścia został kliknięty". Więc w tym przypadku masz dwa różne wydarzenia, dwóch różnych słuchaczy, ale jednego opiekuna.

 23
Author: dogbane,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 14:54:35

Słuchacz jest obiektem, który jest powiadamiany o wystąpieniu zdarzenia i ma 2 główne wymagania- 1-musi być zarejestrowany w jednym lub kilku źródłach, aby otrzymywać powiadomienia o określonych rodzajach zdarzeń 2 - musi implementować metody odbierania i przetwarzania tych powiadomień. Handler jest odpowiedzialny za obsługę zdarzeń.

 5
Author: naren,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-10-13 01:57:38

Słuchacz nasłuchuje zdarzeń, które są obiektami wartości danych opisującymi Zdarzenie. Kiedy zdarzenie miało miejsce i kolejność zdarzeń jest często ważna. Naciśnięcie klawisza "0", po którym następuje " 1 "różni się od" 1 " i "0".

Handler, obsługuje złożony obiekt, np. nowe połączenie gniazda. Funkcja obsługi może przetwarzać obiekt przez Dowolny czas. Czas tworzenia i kolejności obiektów nie jest tak ważny. Połączenie z client0 lub client1 może nastąpić w dowolnej kolejności.

 4
Author: Peter Lawrey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 16:07:45

Myślę, że różnica jest subtelna, ponieważ konkretny słuchacz jest również obsługą zdarzeń lub przynajmniej ma metodę, którą można uznać za obsługę zdarzeń. Oznacza to, że konkretny Detektor obsługuje lub zarządza reakcją na zdarzenie po otrzymaniu obiektu event (ze źródła zdarzenia) ze wszystkimi przydatnymi informacjami o zdarzeniu, które właśnie nastąpiło (na źródle zdarzenia). Ponieważ ten słuchacz musi zaimplementować interfejs xxxListener, który zmusza go do zaimplementowania co najmniej jednej metody, która z kolei wykonywane przez obiekt event-source w momencie wystąpienia zdarzenia, więc sam Detektor można uznać za handler, a dokładniej, metodę interfejsu detektora zaimplementowaną przez obiekt Detektor można uznać za rzeczywisty event-handler. Więc postrzegam event-handler jako tylko kod, który jest wykonywany w reakcji na zdarzenie. Różni się to od obiektu słuchacza, który jest elementem bardziej abstrakcyjnego pojęcia, takiego jak wzorzec projektowy obserwatora. To jest moje osobiste spojrzenie na temat.

 4
Author: Samaritan,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-03-12 14:15:17

Według mnie najważniejszą różnicą jest fakt, że używamy listenerów na Źródło zdarzenia, w przeciwieństwie do Handlera, który jest na typ zdarzenia.

 4
Author: oskar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-07-08 20:49:01

Są koncepcyjnie tym samym obiektem, który wykonuje jakąś akcję w odpowiedzi na zdarzenie UI. Ogólnie rzecz biorąc, w Swing, obiekty te są nazywane " handlerami "na poziomie look-and-feel (do obsługi niskopoziomowych zdarzeń widżetów) i" słuchaczami " na bardziej abstrakcyjnym poziomie interfejsu użytkownika (gdzie będziesz implementował logikę aplikacji).

 2
Author: kprevas,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 14:39:55

EventHandler jest wprowadzony w JavaFX dla wszystkich kontrolek interfejsu użytkownika. Natomiast słuchacz jest zapożyczony do obserwowalnych, takich jak właściwości.

EventHandler jest sposobem na odróżnienie obserwowalnych zdarzeń od zdarzeń interfejsu użytkownika.

 0
Author: sotondolphin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-17 10:01:49

Starałem się zrozumieć wszystkie informacje i jestem zagubiony. Przeglądałem Delphi (Pascal), C, C++, java... nic nie jest clear.So, po miesiącu, to jest problem, jak go widzę. Mogę być całkowicie Nie w porządku, Więc proszę, powiedz mi... uprzejmie proszę.

Jeden nadawca zdarzenia, jeden łapacz, o ile nadawca zarejestruje łapacza. Mam 4 okna dialogowe, które muszą być aktualizowane za każdym razem, gdy zmienia się plik (którego kod obsługi znajduje się w innym module niż 4 okna dialogowe). Rozważałem aktualizację każdy w staromodny sposób, ale potem spojrzałem na zdarzenia Delphi i obsługę wiadomości. Zobaczmy:

Plik F (nadawca) jest gotowy do odczytu i powinien powiadamiać okna dialogowe 1..4 z faktu, że są teraz dane do wyświetlenia i Użytkownika do zabawy. Co jest najlepsze?

Spróbuj zarejestrować okna dialogowe 1..4 jako słuchacze i czy nadawca uruchamia onupdateddataevent jakoś?

Spróbuj wysłać wiadomość przez system, mając nadzieję, że okno dialogowe 1..4 złapie?

Zauważ, że zdarzenie utrzymuje rzeczy połączone, podczas gdy wiadomości nie...i są trudne do debugowania.

A ja się zastanawiam jak blok plików kodu będzie mógł zarejestrować 4 słuchaczy (okna dialogowe)?

To, na co patrzę, to możliwość wywołania kaskadowego, co oznacza, że rozmówca dzwoni do jednego słuchacza, który dzwoni do następnego... aż dotrze do końca łańcucha. Zastanawiam się nawet, czy to w ogóle możliwe.

Przykład:

Powiedzmy, że plik F jest listą języków. Teraz, DialogBox 1 robi coś z listą (dodaje nowy język na przykład); To pole combo aktualizuje plik F; to z kolei uruchamia DataUpdatedEvent. 4 okna dialogowe zawierają, powiedzmy, Tcomboboxy, które wyświetlają listę języków, gdy się pojawią. Chcę, aby 4 pudełka zauważyły zmianę i zaktualizowały własną zawartość pudełka combo za pomocą świeżo zaktualizowanego pliku... bez martwienia się o to, jak skrzynki combo wiedzą, że muszą odświeżyć swoją zawartość. Jeśli działa zgodnie z założeniami parametr Sender zostanie przeniesiony, a okno dialogowe, które uruchomiło dataUpdateEvent, zostanie pominięte, ponieważ zostanie już zaktualizowane. W końcu if sender = self następnie przejdź do następnego obsługi zdarzenia powinno być łatwe do zaimplementowania.

Wszystko dlatego, że chcę ćwiczyć mój mózg... aby zapobiec Alzheimerowi, dodam, że niezbyt skutecznie.

 0
Author: Christian Martin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-21 03:09:37

To semantyka.

  • Listener jest interfejsem.
  • Adapter jest klasą, która implementuje określony interfejs i zapewnia pustą implementację dla swoich metod. Pomaga to, jeśli nie musisz implementować wszystkich metod interfejsu.
  • Handler implementuje kilka interfejsów lub deleguje wywołania do kilku interfejsów.
 -1
Author: AlexR,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-01-18 14:43:12