Modèle Observer : notification d’événements
Implémentez Observer pour découpler les producteurs d’événements des consommateurs dans un système de cours boursiers.
Modèle Observer : notification d’événements est une leçon Java Academy gratuite sur CoddyKit. Ceci est la leçon 1 sur 4. Tu peux lire la leçon complète ci-dessous gratuitement — puis la pratiquer en direct dans le navigateur avec un éditeur de code intégré et un tuteur IA 24/7. Elle fait partie du parcours d'apprentissage Java Academy, et ta progression se synchronise sur le web et l'application CoddyKit. Le cours Java Academy comprend 4 leçons au total.
L’intention d’Observer
Observer, également appelé publication-abonnement, définit une dépendance un-à-plusieurs : lorsque le sujet change d’état, tous les observateurs enregistrés sont automatiquement avertis.
Interfaces Subject et Observer
Le sujet conserve une liste d’observateurs et les avertit. Les observateurs implémentent une méthode update pour réagir aux événements.
public interface Observer {
void update(String event, Object data);
}
public interface Subject {
void addObserver(Observer o);
void removeObserver(Observer o);
void notifyObservers(String event, Object data);
}Subject concret : cotation boursière
Le sujet contient l’état et appelle notifyObservers chaque fois que celui-ci change. Il gère la liste des observateurs.
public class StockTicker implements Subject {
private final List<Observer> observers = new ArrayList<>();
private double price;
public void addObserver(Observer o) { observers.add(o); }
public void removeObserver(Observer o) { observers.remove(o); }
public void setPrice(double p) {
this.price = p;
notifyObservers("PRICE_CHANGED", p);
}
public void notifyObservers(String ev, Object data) {
for (Observer o : observers) o.update(ev, data);
}
}Observateurs concrets
Chaque observateur réagit différemment à la même notification. Ajoutez des observateurs à l’exécution sans modifier le sujet.
public class AlertSystem implements Observer {
public void update(String ev, Object data) {
if ((double) data < 100) System.out.println("ALERT: Low price!");
}
}
public class Logger implements Observer {
public void update(String ev, Object data) {
System.out.println("LOG: " + ev + " = " + data);
}
}Connecter les observateurs
Enregistrez les observateurs auprès du sujet. Ils réagissent tous lorsque le sujet change. Désinscrivez-les pour arrêter de recevoir les mises à jour.
StockTicker ticker = new StockTicker();
ticker.addObserver(new AlertSystem());
ticker.addObserver(new Logger());
ticker.setPrice(95.5); // both observers notifiedjava.util.Observable — obsolète
Le JDK fournissait java.util.Observable et java.util.Observer, mais ces éléments sont obsolètes depuis Java 9. Implémentez votre propre solution ou utilisez des bibliothèques réactives comme RxJava ou Project Reactor.
PropertyChangeListener
Les Java beans fournissent PropertyChangeSupport, un mécanisme Observer intégré pour les changements de propriétés des beans, largement utilisé dans Swing et JavaFX.
public class Model {
private final PropertyChangeSupport pcs = new PropertyChangeSupport(this);
private int value;
public void addPropertyChangeListener(PropertyChangeListener l) { pcs.addPropertyChangeListener(l); }
public void setValue(int v) {
int old = this.value; this.value = v;
pcs.firePropertyChange("value", old, v);
}
}Observer fonctionnel avec Consumer
Utilisez Consumer<T> comme observateur léger au lieu d’une interface dédiée — c’est idéal pour de simples rappels d’événements.
List<Consumer<Double>> listeners = new ArrayList<>();
listeners.add(p -> { if (p < 100) System.out.println("Low price"); });
listeners.add(p -> System.out.println("Price: " + p));
double newPrice = 95.5;
listeners.forEach(l -> l.accept(newPrice));Observer et bus d’événements
Un bus d’événements, comme Guava EventBus, découple davantage le sujet et l’observateur : le sujet publie les événements sur le bus sans savoir qui les écoute. Les observateurs s’abonnent au moyen d’une annotation de méthode.
// Guava EventBus example
EventBus bus = new EventBus();
bus.register(new Logger()); // subscribe
bus.post(new PriceEvent(95.5)); // publishSécurité des threads avec Observer
Si des observateurs peuvent être ajoutés ou supprimés depuis plusieurs threads, protégez la liste avec synchronized ou utilisez CopyOnWriteArrayList pour les charges de travail comportant de nombreuses notifications.
private final List<Observer> observers = new CopyOnWriteArrayList<>();Éviter les fuites mémoire
Les références fortes dans la liste des observateurs empêchent le ramasse-miettes de libérer les objets. Utilisez WeakReference<Observer> ou désinscrivez toujours les observateurs lorsqu’ils ne sont plus nécessaires.
Observer dans les frameworks réels
ApplicationEventPublisher de Spring, LiveData d’Android et les propriétés JavaFX sont toutes des implémentations du modèle Observer à différents niveaux d’abstraction.
Vérification rapide
Quel est le principal avantage du modèle Observer ?
Récapitulatif
Observer définit une chaîne de notifications un-à-plusieurs. Implémentez-le au moyen d’interfaces ou de consommateurs fonctionnels. Utilisez CopyOnWriteArrayList pour garantir la sécurité des threads et désinscrivez toujours les observateurs afin d’éviter les fuites.
Questions Fréquemment Posées
La leçon « Modèle Observer : notification d’événements » est-elle gratuite ?
Oui — le texte complet de « Modèle Observer : notification d’événements » est gratuit à lire ici sur le web. Pour la pratiquer de manière interactive (un éditeur de code intégré et un tuteur IA 24/7) et déverrouiller le reste du cours Java Academy, passe à CoddyKit PRO. Le cours Java Academy comprend 4 leçons au total.
Qu'est-ce que j'apprendrai dans « Modèle Observer : notification d’événements » ?
Implémentez Observer pour découpler les producteurs d’événements des consommateurs dans un système de cours boursiers. Tu pratiques Java Academy avec du code pratique que tu exécutes directement dans le navigateur, et un tuteur IA 24/7 répond à tes questions au fur et à mesure que tu avances dans la leçon.
Dois-je avoir de l'expérience pour commencer Java Academy ?
Aucune expérience préalable n'est requise. Java Academy sur CoddyKit est structuré pour les débutants jusqu'aux apprenants avancés, donc tu peux commencer ici ou depuis le début et avancer à ton rythme. Ceci est la leçon 1 sur 4.
Combien de temps prend la leçon « Modèle Observer : notification d’événements » ?
La plupart des leçons CoddyKit prennent environ 5–10 minutes. Chacune est courte et interactive, tu progresses régulièrement et tu repiques exactement où tu t'es arrêté sur le web et l'app.
Peux-tu écrire et exécuter du code dans cette leçon Java Academy ?
Oui. Chaque leçon Java Academy inclut un éditeur de code intégré, tu écris et exécutes du vrai code directement dans ton navigateur et tu reçois des retours IA instantanés — aucune configuration locale requise.
Toutes les leçons de ce cours
- Modèle Observer : notification d’événements
- Modèle Strategy : algorithmes interchangeables
- Modèle Command : encapsuler des actions
- Template Method : définir des squelettes d’algorithmes