观察者模式是一种设计模式,其中一个对象(称为主题)维护一组依赖于它的对象(称为观察者),当主题的状态发生变化时,它会通知所有观察者。这种模式常用于实现分布式事件处理系统。
下面是一个简单的 Python 实现观察者模式的例子:
# 观察者接口
class Observer:def update(self, message):pass# 具体观察者
class ConcreteObserver(Observer):def __init__(self, name):self.name = namedef 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 = statedef get_state(self):return self._statedef set_state(self, state):self._state = stateself.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 是具体的主题类。主题类维护一个观察者列表,可以添加、移除和通知观察者。
通过运行上述代码,你可以看到观察者在主题状态发生变化时收到通知。这种模式可以帮助你实现松耦合的系统,其中主题和观察者相互独立,可以轻松添加或删除观察者而不影响其他部分的代码。