2015-07-25 3 views
2

Я искал это в Интернете, но не смог найти адекватного объяснения тому, что он точно делает. То, что я увидел, было интерфейсом Java, и оно передавалось как параметр в другом классе как «прослушиватель». Люди добавили в список разных слушателей и назвали их одним методом.Какова цель слушателя в Java?

Я не уверен, почему я буду использовать его. Может ли кто-нибудь объяснить это?

Это мой оригинальный пост, где кто-то сказал мне использовать слушателей.

Link

+1

Не могли бы вы вставить фрагмент кода, который путает вас? Слушатели несколько общие, поэтому их трудно объяснить без конкретного примера кода. – dasblinkenlight

+0

А, конечно. У меня не было точного кода, который я застрял. Я просто просил о помощи, и кто-то рекомендовал использовать фрагменты кода. Я отправлю его сейчас. –

+1

Возможно, вы ищете объяснение шаблона наблюдателя (это общая концепция, а не только конкретная Java). – Pshemo

ответ

4

В примере кода, который связан с KillMonsterEventListener

public interface KillMonsterEventListener { 
    void onKillMonster(); 
} 

обеспечивает способ пользователи вашего API скажут вам примерно следующее:

Вот кусок кода. Когда монстр убит, позвоните ему. Я решу, что делать.

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

yourClass.addKillMonsterEventListener(
    new KillMonsterEventListener() { 
     public onKillMonster() { 
      System.out.println("A good monster is a dead monster!"); 
     } 
    } 
); 

Где-то я мог бы добавить еще один слушатель:

yourClass.addKillMonsterEventListener(
    new KillMonsterEventListener() { 
     public onKillMonster() { 
      monsterCount--; 
     } 
    } 
); 

Когда код проходит через список слушателей на убийство монстра, т.е.

for (KillMonsterEventListener listener : listeners) { 
    listener.onKillMonster() 
} 

и мои фрагменты кода (т. Е. monsterCount-- и распечатка) выполняются. Самое приятное в том, что ваш код полностью отделен от моего: он понятия не имеет, что я печатаю, какую переменную меня уменьшаю и так далее.

+0

Это именно то, что мне нужно. Я не знал, что их также называют наблюдателями. –

0

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

0

Слушатели выполняют некоторую работу при возникновении события. Они называются «Слушателями событий». События, такие как щелчок, зависание и т. Д. Например, у нас есть интерфейс ActionListener в Java. Он вызывает метод actionPerformed(), когда происходит событие. Для получения дополнительной информации вы можете обратиться к http://java.about.com/od/a/g/Actionlistener.htm.

0

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

Вы можете прочитать больше о шаблонах в Java на следующих сайтах:

http://www.journaldev.com/1739/observer-design-pattern-in-java-example-tutorial

http://www.developer.com/java/implementing-behavioral-patterns-in-java.html

3

Это часть парадигмы программирования, которая называется event-driven programming. Объекты отправляют сообщения на другие объекты в определенных случаях, например, когда они меняются.Это часто используется при программировании графического интерфейса. Каждый виджет GUI реализуется классом. Когда вы хотите обрабатывать, например, щелчки мыши от пользователя, вы добавляете слушателя (также называемый обработчиком событий) в виджет GUI. Когда пользователь нажимает на виджет, виджет отправляет событие зарегистрированному слушателю (слушателям), чтобы приложение могло реагировать на щелчок мышью. Это разделяет структуру (класс виджетов GUI) и код приложения. (В некоторых графических интерфейсах, таких как Swing, вы можете добавить произвольное количество слушателей к объекту, в других - указать только один.)

Также в других областях полезно использовать управляемое событиями программирование. Возможно, вам захочется наблюдать объект (см. Observer pattern). Например, коллекция, которая поддерживает это, может отправить событие, если его содержимое изменится. Если вам нужно выполнить некоторую обработку, если это произойдет, вы можете добавить себя в качестве слушателя в этот класс. Альтернативой было бы назвать пост-обработку каждый раз, когда вы добавляете элемент в коллекцию, но это подвержено ошибкам.

1

Слушатель является распространенной формой реализации observerdesign patter в Java. Этот метод также упоминается как callback, который является термином, исходящим из мира процедурных языков.

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

Многих рамочные библиотеки играют роль наблюдаемого, например .:

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

Пример в Java-код:

Часть 1 - Наблюдаемый объект

import java.util.LinkedList; 
import java.util.List; 

public class Observable { 
    private List<Observer> observers; 

    public Observable() { 
     observers = new LinkedList<>(); 
    } 

    public void addObsever(Observer observer) { 
     observers.add(observer); 
    } 

    private void notifyObservers(String whatHappened) { 
     for (Observer observer : observers) { 
      observer.onSomethingHappened(whatHappened); 
     } 
    } 

    public void doSomeStuff() { 
     // ... 
     // Do some business logic here. 
     // ... 

     // Now we want to notify all the listeners about something. 
     notifyObservers("We found it!"); 

     // ... 
     // Do some business logic here 
     // ... 
    } 
} 

Часть 2 - Интерфейс наблюдатель/слушатель

public interface Observer { 
    void onSomethingHappened(String whatHappened); 
} 

Часть 3 - Базовая реализация интерфейса наблюдатель/слушатель

public class MyObserver implements Observer { 
    @Override 
    public void onSomethingHappened(String whatHappened) { 
     System.out.println(whatHappened); 
    } 
} 

Часть 4 - Собираем все вместе

public class Main { 
    public static void main(String[] args) { 

     // Create the observable. 
     Observable myObservable = new Observable(); 

     // Create the observers (aka listeners). 
     Observer myObserverA = new MyObserver(); 
     Observer myObserverB = new MyObserver(); 

     // Register the observers (aka listeners). 
     myObservable.addObsever(myObserverA); 
     myObservable.addObsever(myObserverB); 

     myObservable.doSomeStuff(); 

    } 
} 

И результат на стандартный вывод будет:

We found it! 
We found it! 
0

Servlet Слушатель используется для прослушивания событий в веб-контейнере, например, при создании сеанса или поместить атрибут в сеансе или если вы пассивации и активировать в другом контейнере, чтобы подписаться на эти события вы может настроить прослушиватель в web.xml, например, HttpSessionListener.

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

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

Вот блог для Servlet Слушатель http://array151.blogspot.in/2016/12/servlet-listener.html

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