Python 设计模式-观察者模式

观察者模式是一种行为设计模式,它允许你定义一种订阅机制,可以在对象事件发生时通知多个观察者对象。下面是一个简单的Python观察者模式代码示例:

class Subject:
    """
    被观察者类,维护观察者列表,并在状态发生改变时通知观察者
    """
    def __init__(self):
        self._observers = set()

    def attach(self, observer):
        """
        将观察者添加到观察者列表中
        """
        self._observers.add(observer)

    def detach(self, observer):
        """
        将观察者从观察者列表中移除
        """
        self._observers.remove(observer)

    def notify(self, message):
        """
        通知所有观察者,传递消息
        """
        for observer in self._observers:
            observer.update(message)


class Observer:
    """
    观察者类,定义一个update方法,当被观察者发生变化时被调用
    """
    def update(self, message):
        pass


class ConcreteObserver(Observer):
    """
    具体观察者类,实现update方法,当被观察者发生变化时打印消息
    """
    def update(self, message):
        print(f"Received message: {message}")


if __name__ == '__main__':
    subject = Subject()
    observer_1 = ConcreteObserver()
    observer_2 = ConcreteObserver()

    subject.attach(observer_1)
    subject.attach(observer_2)

    subject.notify("Hello, observers!")

在上面的代码中,我们定义了一个被观察者类Subject和一个观察者类ObserverSubject维护了一个观察者列表_observers,并提供了attachdetachnotify方法来添加、移除和通知观察者。Observer定义了一个update方法,当被观察者发生变化时被调用。

我们还定义了一个具体观察者类ConcreteObserver,它实现了update方法,当被观察者发生变化时打印消息。

main函数中,我们创建了一个被观察者对象subject和两个观察者对象observer_1observer_2,并将它们添加到被观察者对象的观察者列表中。最后,我们调用subject.notify方法,通知所有观察者对象,并传递了一个消息。观察者对象收到消息后,会执行自己的逻辑,这里我们只是简单地打印了一条消息。

posted @ 2023-05-21 17:56  kitai  阅读(137)  评论(0)    收藏  举报