理解Python观察者模式的定义和概念
观察者模式是一种行为设计模式,它允许多个对象(称为观察者)同时监听一个主题对象,并在主题对象状态发生变化时接收通知。观察者模式中,主题对象(也称为被观察者)是一个重要的组成部分,它维护一份观察者列表,并提供了添加、删除和通知观察者的方法。观察者模式的目的是解耦观察者和被观察者之间的关系,从而使得它们可以独立地变化而不影响彼此。
在 Python 中,实现观察者模式通常需要定义两个类:Subject 和 Observer。Subject 类维护观察者列表和当前状态,并提供添加、删除和通知观察者的方法;Observer 类定义观察者的行为。
以下是一个简单的示例,用 Python 实现观察者模式:
class Subject: def __init__(self): self.observers = [] self.state = "" def attach(self, observer): self.observers.append(observer) def detach(self, observer): self.observers.remove(observer) def notify(self): for observer in self.observers: observer.update(self.state) def set_state(self, state): self.state = state self.notify() class Observer: def update(self, state): pass class ConcreteObserver(Observer): def __init__(self, name): self.name = name def update(self, state): print(f"{self.name} received new state: {state}") subject = Subject() observer1 = ConcreteObserver("pidancode.com") observer2 = ConcreteObserver("皮蛋编程") subject.attach(observer1) subject.attach(observer2) subject.set_state("new state") subject.detach(observer2) subject.set_state("another new state")
在这个示例中,Subject 类维护了一个观察者列表和当前状态,提供了 attach、detach 和 notify 方法用于添加、删除和通知观察者。Observer 类定义了观察者的行为,其中 update 方法被 ConcreteObserver 类重写,用于在观察到被观察者状态变化时执行的操作。在示例的末尾,我们创建了一个主题对象 subject 和两个观察者 observer1 和 observer2,并将 observer1 和 observer2 添加到 subject 的观察者列表中。随后,我们调用 subject 的 set_state 方法,将其状态设置为 "new state",然后通知所有观察者。观察者 observer1 和 observer2 都收到了通知,输出相应的信息。接着,我们从 subject 中删除了 observer2,并再次调用 set_state 方法,将其状态设置为 "another new state",然后通知所有观察者。此时,只有 observer1 收到了通知。
相关文章