观察者模式是一种设计模式,允许一个对象(主题或被观察者)维护一个依赖于它的对象的列表。当这些依赖项的状态发生改变时,主题会自动通知所有依赖于它的观察者。这种模式在软件工程中用于实现松耦合的发布-订阅系统,通过定义一对多的依赖关系,使多个观察者对象同时监听某一个主题对象。
这种模式的主要优点是它使得对象之间的解耦变得简单,因为不需要在对象之间直接传递消息,相反,它们可以通过观察者列表间接地通信,这使得代码更易于理解和维护,并且可以更容易地扩展。
以下是观察者模式的一个基本实现:
class Subject: def __init__(self): self.observers = [] def attach(self, observer): self.observers.append(observer) def notify(self, data): for observer in self.observers: observer.update(data) class ConcreteObserver: def update(self, data): print("Received data:", data) class ConcreteSubject: def __init__(self): self._observers = [] def attach(self, observer): self._observers.append(observer) def notify(self, data): for observer in self._observers: observer.update(data) Example usage: subject = ConcreteSubject() observer1 = ConcreteObserver() subject.attach(observer1) subject.notify("Hello, world!")
在这个例子中,我们创建了一个ConcreteSubject
类,它有一个attach
方法来添加观察者,以及一个notify
方法来通知所有的观察者,我们还创建了一个ConcreteObserver
类,它有一个update
方法来接收数据并打印出来。
当我们创建一个ConcreteSubject
实例并调用notify
方法时,它会通知所有的观察者,观察者会调用它们的update
方法来接收数据并打印出来。