Python 设计模式之观察者模式
观察者模式是一种行为设计模式,它允许一个对象(称为主题)维护其状态,并在状态发生改变时通知其依赖项(称为观察者),以便它们可以根据最新的状态进行更新。
观察者模式有三个核心组件:主题(Subject)、观察者(Observer)和通知(Notification)。主题维护其状态,并提供一些方法来添加、删除和通知观察者。观察者定义一个更新方法,该方法在接收到通知时被调用,以便它可以更新自己。通知是传递给观察者的消息,其中包含主题的当前状态。
下面是一个 Python 实现的观察者模式的示例:
class Subject: def __init__(self): self._observers = [] def attach(self, observer): if observer not in self._observers: self._observers.append(observer) def detach(self, observer): try: self._observers.remove(observer) except ValueError: pass def notify(self, message): for observer in self._observers: observer.update(message) class Observer: def update(self, message): pass class ConcreteSubject(Subject): def __init__(self, state=None): super().__init__() self._state = state @property def state(self): return self._state @state.setter def state(self, state): self._state = state self.notify(state) class ConcreteObserver(Observer): def update(self, message): print(f'Received message: {message}') # 示例 subject = ConcreteSubject() observer_a = ConcreteObserver() observer_b = ConcreteObserver() subject.attach(observer_a) subject.attach(observer_b) subject.state = 'pidancode.com' subject.detach(observer_b) subject.state = '皮蛋编程'
在这个示例中,Subject 类表示主题,它维护其状态并提供 attach、detach 和 notify 方法以添加、删除和通知观察者。Observer 类表示观察者,它定义一个 update 方法,在接收到通知时被调用以更新自己。ConcreteSubject 和 ConcreteObserver 是具体的实现,它们继承自 Subject 和 Observer,并实现了它们的方法。
在示例中,创建了一个 ConcreteSubject 对象,并添加了两个 ConcreteObserver 观察者。当主题的状态发生改变时,它会调用 notify 方法并将新状态传递给观察者。```
在这个示例中,观察者只是简单地打印了接收到的消息。
当运行示例时,输出将是:
Received message: pidancode.com Received message: 皮蛋编程
这表明观察者已经成功接收到了主题的通知,并进行了更新。
相关文章