Во -первых, давайте представим, что такое слушатель:
Слушатель - это обычная программа Java, которая реализует ожидающий интерфейс. Эта программа специально используется для прослушивания методов вызовов другого класса.
Это использует режим наблюдателя.
Что такое режим наблюдателя:
Определяет зависимость от одного ко многим между объектами. Когда состояние объекта меняется, все объекты, которые зависят от него, уведомляются об обновлении автоматически.
Пример:
Addxxxxlistener в программировании GUI - все это режим наблюдателя.
Например, добавление событий прослушивания к нажатию кнопок, добавление событий прослушивания в клавиатуру и т. Д.
Три важные категории образца наблюдателя:
Источник слушания события, то есть объекта, который мы используем.
Зарегистрированный слушатель специально используется для прослушивания используемых в настоящее время объектов.
Событие объекта события - это объект, который слушают!
Давайте сначала посмотрим на простую версию монитора, написанную самим.
Простая версия:
Есть источники событий, слушатели и тестовые классы.
Событие будет реализовано в следующей полной версии.
Шаги развития:
Шаг 1: Реализуйте классного человека, которого нужно слушать.
Шаг 2: Реализуйте интерфейс прослушивания Ipersonrunlistener.
Шаг 3: Лично класс, предоставьте один метод (или несколько, я предоставляю здесь 2 метода) для регистрации классов IpersonRunListener, то есть AddBefore и AddedAfter
Шаг 4: Экземпляр класса Ipersonrunlistener должен поддерживаться в классе человека.
Шаг 5: При вызове метода человека. Определите, является ли ipersonrunlistener нуль, и если он не нулевой, вызовите его метод борьбы.
Шаг 6: В демо -классе, экземпляр и зарегистрируйте слушателя.
Человек:
пакет cn.hncu.designpattern1; public class person {private String name; Частный Ipersonrunlistener Slister1; Частный Ipersonrunlistener Slireder2; public Perfor (String name) {super (); this.name = name; } public void run () {if (слушатель1! = null) {слушатель1.fighting (); } System.out.println (name+"run ..."); if (слушатель2! = null) {СЛУШАЕТЕ2.fighting (); }} public void AddBefore (IpersonRunListener Slister) {this.Listener1 = слушатель; } public void Addedafter (IpersonRunListener Slister) {this.Listener2 = слушатель; }} интерфейс ipersonrunlistener {public void fight ();}Демо
Пакет cn.hncu.designpattern1; демо открытого класса {public static void main (string [] args) {Person Person = new Person ("Zhang San"); Ipersonrunlistener Slireder = новый ipersonrunlistener () {@Override public void Fighting () {// Есть много вещей, которые вы можете сделать здесь, а не только вывод //, однако, поскольку вы еще не написали объект события, вы не можете получить систему. }}; человек. A = новый a (); человек. Addafter (a); Person.run (); }} класс A реализует ipersonrunlistener {@override public void fighting () {// Есть много вещей, которые вы можете сделать здесь, а не только вывод //, однако, поскольку вы еще не написали объект события, вы не можете получить систему. }}Выход:
Добавить источник события в полную версию:
Здесь к предыдущему было добавлено объект события. Это считается полной версией.
Шаги развития:
Шаг 1: Продолжайте добавлять класс PersoneVent на основе предыдущей страницы (обратите внимание, что я сказал, что это класс, а не интерфейс), представляющий объект события.
Шаг 2: Добавьте атрибут человека в объект PersoneVent, чтобы определить объект источника события.
Шаг 3: Измените метод борьбы интерфейса PersonListener и позвольте ему получить параметр PersoneVent.
Шаг 4: В методе запуска класса человека, если определено, что свойство PersonListener не является пустым, метод борьбы называется, переноситель создается экземпляром, и метод борьбы передается методу борьбы.
Шаг 5: В основном методе проверьте, является ли это одним и тем же объектом через метод GetSource PersoneVent.
Человек. Ява
Пакет cn.hncu.designpattern2; Public Class Person {Private String name; Частный Ipersonrunlistener Sulderer; public Perfor (String name) {super (); this.name = name; } public void run () {System.out.println (name+"start wrunning ..."); if (слушатель! = null) {Слушатель.fighting (новый PersoneVent (this)); }} public void AddPersonListener (IpersonRunListener Slister) {this.Listener = слушатель; } public String getName () {return name; } @Override public String toString () {return "person [name =" + name + ", alluster =" + alinger + "]"; }} интерфейс ipersonrunlistener {public void Fighting (personevent pe);} класс Personevent {person p = null; public personevent (person p) {this.p = p; } public String getName () {return p.getName (); } public Object getSource () {return p; }} // Мы также можем написать базовый класс, который помогает нам реализовать интерфейс // он записывает наш общий шаблон. Если мы наследуем этот класс, мы можем перестать писать его. // Если есть разные функции, мы сами напишем это, чтобы переопределить этот класс класса DefaultCatlistener реализует ipersonRunlistener {@Override public void Fighting (personevent pe) {System.out.println («Действие по умолчанию ...»); }}Демо. Ява
Пакет cn.hncu.designpattern2; открытый класс демонстрация {public static void main (string [] args) {person p1 = новый человек ("zhang san"); Человек P2 = новый человек ("Джек"); IpersonRunlistener Slireer = новый iPersonRunListener () {@Override public void Fighting (personeVent pe) {System.out.println (pe.getSource ()+"Это было запущено ..."); if (pe.getName (). equals ("zhang san")) {System.out.println (pe.getName ()+"запустить на первое место ..."); }}}}; p1.addpersonListener (слушатель); p2.addpersonListener (слушатель); p1.run (); p2.run (); Человек p3 = новый человек ("li si"); p3.addpersonListener (новый defaultCatlistener ()); p3.run (); }}Демонстрационные результаты:
Это основные принципы. Если вы измените вывод события в нем на действие, которое вам нужно, вы можете реализовать нужную функцию. Добавьте слушателя, и вы можете вызвать метод, который вы хотите позвонить до или после метода запуска, и выполнить действие, которое вы хотите сделать!
Выше всего содержание этой статьи. Я надеюсь, что это будет полезно для каждого обучения, и я надеюсь, что все будут поддерживать Wulin.com больше.