Event entre plusieurs classes

Fermé
Centre - 19 mai 2013 à 18:39
 Centre - 19 mai 2013 à 19:44
Bonjour,

J'aimerai faire communiquer des Event entre une classe A et une classe B.

J'ai donc une interface qui implémente EventListener, et une classe qui implémente EventObject (qui sera l'élément à faire communiquer).

Si j'ai bien compris, la classe A détient une liste des classes qui écoutent sur EventListener, et dois donc les notifier.
Et la classe B s'est ajouté à la liste des classes qui doit être prévenus en cas de notification de la classe A avec un .addListener();

Le problème est ici, est-on obligé d'avoir un lien en croix ? : A doit savoir qu'il doit notifier B, et B doit s'être ajouté à la liste des écouteurs de A.

Ça m'ennuie un peu de devoir instancier la classe B dans A pour lui passer la liste d'écoute, afin qu'il s'ajoute dedans.

Je penses pas que ce soit comme ça que ça marche, il me semble que j'ai du louper un truc ... A moins d'utiliser une liste globale accessible à toute les classes mais il n'y a plus de raison d'implémenter l'interface d'écoute d'un EventListener donc ce n'est pas ça ...

Pouvez-vous m'en dire plus ?

Merci.

2 réponses

KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
19 mai 2013 à 19:28
J'avoue n'avoir jamais eu vraiment besoin de faire ce genre de choses, j'ai du le faire une fois "pour savoir" et en gros tu as quelque chose comme ça :

1) une classe MonEvent extends EventObject qui a définit un certains nombre de caractéristiques sur l'évènement que tu veux récupérer.

2) une interface MonEventListener extends EventListener qui définit les méthodes de traitements à opérer lorsque survient un évènement. Ces méthodes prennent en paramètres des objets MonEvent, par exemple : monEventOccured(MonEvent)

3) une classe MaClasse qui génère ces évènements, c'est à elle de traiter les évènement. Pour cela elle possède en particulier une méthode qui s'appelle généralement addMonEventListener (mais le nom n'est pas imposé) et qui prend en paramètre un objet MonEventListener.

Après tu gères les évènements comme tu veux, ça dépend beaucoup de leur nature, mais en gros tu auras quelque chose comme ça :

public MaClasse
{
    private Collection<MonEventListener> mesEventListener; 
    
    public void addMonEventListener(MonEventListener monEventListener)
    {
        mesEventListener.add(monEventListener);
    }
    
    private void monOperation() // provoque un évènement
    {
        MonEvent monEvent = new MonEvent(...);
        
        for (MonEventListener listener : mesEventListener)
            listener.monEventOccured(monEvent);
    }
}
0
Merci, oui je comprends je vais continuer à essayer :)
0