观察者模式是一种设计模式,其中一个对象(称为主题)维护一组依赖于它的对象(称为观察者),当主题的状态发生变化时,它会通知所有观察者。这种模式常用于实现分布式事件处理系统。

下面是一个简单的 Python 实现观察者模式的例子:

# 观察者接口
class Observer:
    def update(self, message):
        pass

# 具体观察者
class ConcreteObserver(Observer):
    def __init__(self, name):
        self.name = name

    def update(self, message):
        print(f"{self.name} 收到消息: {message}")

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

    def add_observer(self, observer):
        if observer not in self._observers:
            self._observers.append(observer)

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

    def notify_observers(self, message):
        for observer in self._observers:
            observer.update(message)

# 具体主题
class ConcreteSubject(Subject):
    def __init__(self, state):
        super().__init__()
        self._state = state

    def get_state(self):
        return self._state

    def set_state(self, state):
        self._state = state
        self.notify_observers(f"状态已更新为 {state}")

# 示例
if __name__ == "__main__":
    # 创建观察者
    observer1 = ConcreteObserver("Observer 1")
    observer2 = ConcreteObserver("Observer 2")

    # 创建主题
    subject = ConcreteSubject("初始状态")

    # 将观察者添加到主题中
    subject.add_observer(observer1)
    subject.add_observer(observer2)

    # 主题状态发生变化,通知观察者
    subject.set_state("新状态")

在这个例子中,Observer 是观察者接口,ConcreteObserver 是具体的观察者类。Subject 是主题接口,ConcreteSubject 是具体的主题类。主题类维护一个观察者列表,可以添加、移除和通知观察者。

通过运行上述代码,你可以看到观察者在主题状态发生变化时收到通知。这种模式可以帮助你实现松耦合的系统,其中主题和观察者相互独立,可以轻松添加或删除观察者而不影响其他部分的代码。

01-04 23:34