L’Observateur est un patron de conception comportemental qui permet à certains objets d’envoyer des notifications concernant leur état à d’autres objets.
Ce patron fournit la possibilité aux objets qui implémentent une interface de souscription, de s’inscrire et de se désinscrire de ces événements.
Exemples d’utilisation : L’observateur est assez répandu en Java, surtout dans les composants GUI. Il fournit une manière de réagir aux événements qui se produisent chez d’autres objets sans se coupler à leurs classes.
Voici quelques exemples tirés des bibliothèques principales de Java :
Identification : Ce patron peut être reconnu dans les méthodes de souscription qui stockent des objets dans une liste et par les appels des objets de cette liste à la méthode update.
Inscription aux événements
Dans cet exemple, l’observateur établit une collaboration indirecte entre les objets d’un éditeur de texte. Chaque fois que l’objet Éditeur est modifié, il envoie une notification à ses souscripteurs. EmailNotificationListener et LogOpenListener réagissent à ces notifications en exécutant leurs comportements principaux.
Les classes du souscripteur ne sont pas couplées aux classes de l’éditeur et peuvent être réutilisées dans d’autres applications si besoin. La classe Éditeur dépend uniquement de l’interface abstraite du souscripteur. Ainsi nous pouvons ajouter de nouveaux types de souscripteurs sans modifier le code de l’éditeur.
publisher
publisher/EventManager.java: Diffuseur de base
editor
editor/Editor.java: Diffuseur concret suivi par d’autres objets
listeners
listeners/EventListener.java: Interface Observateur commune
listeners/EmailNotificationListener.java: Envoie des e-mails lorsqu’il reçoit une notification
listeners/LogOpenListener.java: Écrit un message dans une log lorsqu’il reçoit une notification