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