Jonas Kemper

Design Patterns with Python Examples - Part 4

Overview: The Observer pattern defines a one-to-many relationship where changes in one object trigger updates in others.

Example Use Case: A stock market ticker that notifies multiple observers (apps, dashboards) of price updates.

class Subject:
    def __init__(self):
        self._observers = []

    def attach(self, observer):
        self._observers.append(observer)

    def detach(self, observer):
        self._observers.remove(observer)

    def notify(self, data):
        for observer in self._observers:
            observer.update(data)

class StockObserver:
    def __init__(self, name):
        self.name = name

    def update(self, price):
        print(f"{self.name} received stock update: ${price}")

stock_ticker = Subject()

alice = StockObserver("Alice")
bob = StockObserver("Bob")

stock_ticker.attach(alice)
stock_ticker.attach(bob)

stock_ticker.notify(135.5)
stock_ticker.notify(140.0)

Why it’s useful: Ideal for event-driven systems where multiple components must stay in sync automatically.