观察者模式是一种行为设计模式,它允许你定义一种订阅机制,可以在对象事件发生时通知多个观察者对象。下面是一个简单的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
和一个观察者类Observer
。Subject
维护了一个观察者列表_observers
,并提供了attach
、detach
和notify
方法来添加、移除和通知观察者。Observer
定义了一个update
方法,当被观察者发生变化时被调用。
我们还定义了一个具体观察者类ConcreteObserver
,它实现了update
方法,当被观察者发生变化时打印消息。
在main
函数中,我们创建了一个被观察者对象subject
和两个观察者对象observer_1
和observer_2
,并将它们添加到被观察者对象的观察者列表中。最后,我们调用subject.notify
方法,通知所有观察者对象,并传递了一个消息。观察者对象收到消息后,会执行自己的逻辑,这里我们只是简单地打印了一条消息。