Avancé
🧠 Fondamentaux
30 XP
0 personnes ont réussi
Pattern Observer
L'Observer (ou publish/subscribe) est un pattern ou un objet (le Sujet) maintient une liste d'abonnes (les Observateurs) et les previent automatiquement quand quelque chose se passe.
C'est comme un abonnement a une newsletter : quand un nouvel article est publie, tous les abonnes recoivent une notification. Ceux qui se sont desabonnes ne recoivent plus rien.
Ce pattern est partout : les événements dans les interfaces graphiques, les webhooks, les notifications push, les systèmes de messagerie.
Implemente le pattern Observer : - Sujet a abonner(obs), desabonner(obs), notifier(événement) - notifier appelle obs.recevoir(événement) sur chaque observateur - Observateur(nom) a recevoir(événement) qui ajoute événement dans sa liste messages
Exemple : s = Sujet() o = Observateur('A') s.abonner(o) s.notifier('clic') o.messages # ['clic']
Tests (2/4)
Notification simple
s = Sujet()
o = Observateur('A')
s.abonner(o)
s.notifier('clic')
assert o.messages == ['clic']
Plusieurs observateurs
s = Sujet()
o1, o2 = Observateur('A'), Observateur('B')
s.abonner(o1)
s.abonner(o2)
s.notifier('ping')
assert o1.messages == ['ping'] and o2.messages == ['ping']
+ 0 tests cachés
Indices (3 disponibles)
Solution officielle
class Sujet:
def __init__(self):
self._observateurs = []
def abonner(self, obs):
self._observateurs.append(obs)
def desabonner(self, obs):
self._observateurs.remove(obs)
def notifier(self, événement):
for obs in self._observateurs:
obs.recevoir(événement)
class Observateur:
def __init__(self, nom):
self.nom = nom
self.messages = []
def recevoir(self, événement):
self.messages.append(événement)