Паттерн Наблюдатель (Observer) в Python

Наблюдатель (Observer, Dependents, Publish-Subscribe) — паттерн поведения объектов. Определяет зависимость типа «один ко многим» между объектами таким образом, что при изменении состояния одного объекта все зависящие от него оповещаются об этом и автоматически обновляются.

class Subject:

    def __init__(self):
        self.data = None
        self.observers = set()

    def attach(self, observer):
        self.observers.add(observer)

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

    def set_data(self, data):
        self.data = data
        self.notify(data)

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

class BaseObserver:

    def update(self, data):
        raise NotImplementedError


class Observer(BaseObserver):

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

    def update(self, data):
        print(self.name, data)


subject = Subject()
subject.attach(Observer("Observer 1"))
subject.attach(Observer("Observer 2"))
subject.set_data("Hello")

Получаем

Observer 2 Hello
Observer 1 Hello

 

Ссылка на основную публикацию