Создание пользовательского события в Java
Я хочу сделать что-то подобное в Java, но я не знаю как:
когда событие "объект 1 сказать "Привет" происходит, затем объект 2 отвечает на это событие, говоря "Привет".
может кто-нибудь дать мне подсказку или пример кода?
3 ответа:
вы, вероятно, хотите посмотреть в шаблон Observer.
вот пример кода, чтобы начать работу:
import java.util.*; // An interface to be implemented by everyone interested in "Hello" events interface HelloListener { void someoneSaidHello(); } // Someone who says "Hello" class Initiater { private List<HelloListener> listeners = new ArrayList<HelloListener>(); public void addListener(HelloListener toAdd) { listeners.add(toAdd); } public void sayHello() { System.out.println("Hello!!"); // Notify everybody that may be interested. for (HelloListener hl : listeners) hl.someoneSaidHello(); } } // Someone interested in "Hello" events class Responder implements HelloListener { @Override public void someoneSaidHello() { System.out.println("Hello there..."); } } class Test { public static void main(String[] args) { Initiater initiater = new Initiater(); Responder responder = new Responder(); initiater.addListener(responder); initiater.sayHello(); // Prints "Hello!!!" and "Hello there..." } }
то, что вы хотите, является реализацией шаблон Observer. Вы можете сделать это самостоятельно полностью, или использовать Java-классы, такие как
java.util.Observer
иjava.util.Observable
есть 3 различных способа, которыми вы можете настроить это:
Thrower
внутриCatcher
Catcher
внутриThrower
Thrower
иCatcher
внутри другого класса, в данном примереTest
РАБОЧИЙ ПРИМЕР GITHUB Я ЦИТИРУЮ по умолчанию используется вариант 3, чтобы попробовать другие просто раскомментировать "
Optional
" блок кода класса, который вы хотите быть главным, и установите это класс как${Main-Class}
переменнаяbuild.xml
file:4 вещи, необходимые для броска кода стороны:
import java.util.*;//import of java.util.event //Declaration of the event's interface type, OR import of the interface, //OR declared somewhere else in the package interface ThrowListener { public void Catch(); } /*_____________________________________________________________*/class Thrower { //list of catchers & corresponding function to add/remove them in the list List<ThrowListener> listeners = new ArrayList<ThrowListener>(); public void addThrowListener(ThrowListener toAdd){ listeners.add(toAdd); } //Set of functions that Throw Events. public void Throw(){ for (ThrowListener hl : listeners) hl.Catch(); System.out.println("Something thrown"); } ////Optional: 2 things to send events to a class that is a member of the current class . . . go to github link to see this code . . . }
2 вещи, необходимые в файле класса для получения событий из класса
/*_______________________________________________________________*/class Catcher implements ThrowListener {//implement added to class //Set of @Override functions that Catch Events @Override public void Catch() { System.out.println("I caught something!!"); } ////Optional: 2 things to receive events from a class that is a member of the current class . . . go to github link to see this code . . . }