OOP & Design Patterns - Observer Pattern - Event System, Publish-Subscribe
Consider the following Python code implementing a thread-safe observer pattern. What will be printed after executing the sequence of method calls shown below?
import threading
class Observer:
def __init__(self, id):
self.id = id
def notify(self, event, data):
print(f'Observer {self.id} got {event} with {data}')
class EventManager:
def __init__(self):
self.lock = threading.Lock()
self.subscribers = {}
def subscribe(self, observer, event):
with self.lock:
self.subscribers.setdefault(event, set()).add(observer)
def publish(self, event, data):
with self.lock:
observers = list(self.subscribers.get(event, []))
for obs in observers:
obs.notify(event, data)
mgr = EventManager()
obs1 = Observer(1)
obs2 = Observer(2)
mgr.subscribe(obs1, 'update')
mgr.subscribe(obs2, 'update')
mgr.publish('update', 'version 1')
mgr.publish('delete', 'file.txt')