Observer pattern

From wikinotes

The observer pattern is used when several objects need to to be notified of changes to one object. (a log-watcher, weather-data, chatroom, ...).

Instead of each object polling the object in question, the subject notifies a list of observers whenever it changes.

class Subject(object):
    def __init__(self):
        self._observers = set()

    def add_observer(self, observer):
        self._observers.add(observer)

    def remove_observer(self, observer):
        self._observers.pop(observer)

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


class Observer(object):
    def __init__(self, subject):
        self._subject = subject
        self._subject.add_observer(self)

    def update(self):
        # re-read subject, and do something.