Event Bus et le pattern Observer en Java : guide avec exemples

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Event Bus et le pattern Observer en Java

\n\n

Les applications modernes sont de plus en plus construites sur une architecture orientée événements. Deux outils clés pour implémenter ce modèle en Java sont le pattern Observer et son évolution — l'Event Bus (bus d'événements). Dans cet article, nous analyserons leurs différences, comment implémenter chacun d'eux, et quelles bibliothèques peuvent simplifier le développement.

\n\n

Qu'est-ce que le pattern Observer ?

\n\n

Le pattern Observer (Observateur) est un modèle de conception comportemental dans lequel un objet (sujet) notifie plusieurs objets dépendants (observateurs) d'un changement de son état. En Java, ce pattern est souvent utilisé dans les interfaces graphiques, les systèmes de journalisation et le traitement d'événements.

\n\n

Composants clés :

\n
    \n
  • Subject — source d'événements, gère la liste des observateurs
  • \n
  • Observer — interface implémentée par tous les abonnés
  • \n
  • ConcreteSubject — implémentation concrète du sujet
  • \n
  • ConcreteObserver — observateur concret
  • \n
\n\n

Exemple d'implémentation en Java pur :

\n\n
// Interface de l'observateur\ninterface Observer {\n    void update(String event);\n}\n\n// Interface du sujet\ninterface Subject {\n    void attach(Observer observer);\n    void detach(Observer observer);\n    void notifyObservers(String event);\n}\n\n// Sujet concret\nclass EventManager implements Subject {\n    private List<Observer> observers = new ArrayList<>();\n    \n    @Override\n    public void attach(Observer observer) {\n        observers.add(observer);\n    }\n    \n    @Override\n    public void detach(Observer observer) {\n        observers.remove(observer);\n    }\n    \n    @Override\n    public void notifyObservers(String event) {\n        for (Observer observer : observers) {\n            observer.update(event);\n        }\n    }\n    \n    public void fireEvent(String event) {\n        System.out.println("Événement : " + event);\n        notifyObservers(event);\n    }\n}\n\n// Observateur concret\nclass LogObserver implements Observer {\n    @Override\n    public void update(String event) {\n        System.out.println("Log : événement reçu - " + event);\n    }\n}\n\n// Utilisation\npublic class ObserverDemo {\n    public static void main(String[] args) {\n        EventManager manager = new EventManager();\n        manager.attach(new LogObserver());\n        manager.fireEvent("Utilisateur connecté");\n    }\n}
\n\n

Qu'est-ce qu'un Event Bus ?

\n\n

L'Event Bus (bus d'événements) est un mécanisme centralisé d'échange de messages entre les composants d'une application. Contrairement à l'Observer classique où le sujet gère directement les abonnés, l'Event Bus sépare les expéditeurs et les destinataires des événements via un bus commun.

\n\n

Avantages de l'Event Bus :

\n
    \n
  • Faible couplage des composants
  • \n
  • Abonnement et publication simplifiés
  • \n
  • Prise en charge du filtrage des événements par type
  • \n
  • Traitement asynchrone (optionnel)
  • \n
\n\n

Bibliothèque Guava EventBus

\n\n

Google Guava fournit une implémentation puissante de l'Event Bus. Elle est largement utilisée dans les projets industriels et facile à intégrer.

\n\n

Ajout Maven :

\n
<dependency>\n    <groupId>com.google.guava</groupId>\n    <artifactId>guava</artifactId>\n    <version>33.0.0-jre</version>\n</dependency>
\n\n

Exemple d'utilisation :

\n\n
import com.google.common.eventbus.EventBus;\nimport com.google.common.eventbus.Subscribe;\n\n// Classe d'événement\nclass UserLoginEvent {\n    private final String username;\n    \n    public UserLoginEvent(String username) {\n        this.username = username;\n    }\n    \n    public String getUsername() {\n                    

Recommendations