Créer un événement personnalisé en Java
Je veux faire quelque chose comme ça en Java mais je ne connais pas le chemin:
Lorsque l'événement "l'objet 1 dit 'bonjour '" se produit, puis l'objet 2 répond à cet événement en disant "bonjour".
Quelqu'un Peut-il me donner un indice ou un exemple de code?
3 answers
Vous voulez probablement regarder dans le modèle d'observateur.
Voici un exemple de code pour vous lancer:
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..."
}
}
Article connexe: Java: Création d'un événement personnalisé
Ce que vous voulez, c'est une mise en œuvre de la observateur modèle. Vous pouvez le faire vous-même complètement, ou utiliser des classes java comme java.util.Observer
et java.util.Observable
Il existe 3 façons différentes de configurer cela:
-
Thrower
à l'intérieur deCatcher
-
Catcher
à l'intérieur deThrower
-
Thrower
etCatcher
à l'intérieur d'une autre classe dans cet exempleTest
L'EXEMPLE DE TRAVAIL GITHUB QUE JE CITE Par défaut à l'option 3, pour essayer les autres, décommentez simplement le bloc de code "Optional
" de la classe que vous voulez être principal, et définissez cette classe comme variable ${Main-Class}
dans le fichier build.xml
:
4 Les choses nécessaires pour lancer le code latéral:
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 Choses nécessaires dans un fichier de classe pour recevoir des événements d'une classe
/*_______________________________________________________________*/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 . . .
}