一分钟了解python的observer pattern
在Python中,Observer模式是一种行为型模式,它允许一个对象(称为主题)向多个监听器(称为观察者)发送通知。这种模式通常用于需要实时更新的应用程序中,例如股票价格更新、温度计读数等。在这种应用中,我们希望当主题发生变化时,所有的观察者都能够及时得到通知,并进行相应的操作。
下面我们通过一个简单的例子来说明Python中的Observer模式。假设我们正在构建一个气象站应用程序,该应用程序可以测量外部温度,并通知多个观察者。在这种情况下,我们可以使用Observer模式来实现此功能。我们可以定义一个Subject类来表示主题,并定义一个Observer类来表示观察者。当温度发生变化时,我们可以通知所有的观察者,并让它们进行相应的操作。
下面是Python中的实现:
class Subject:
def __init__(self):
self.observers = []
self.temperature = 0.0
def register_observer(self, observer):
self.observers.append(observer)
def remove_observer(self, observer):
self.observers.remove(observer)
def notify_observers(self):
for observer in self.observers:
observer.update(self.temperature)
def set_temperature(self, temperature):
self.temperature = temperature
self.notify_observers()
class Observer:
def update(self, temperature):
pass
class EmailNotifier(Observer):
def update(self, temperature):
print("Sending email notification! Current temperature is %f" % temperature)
class TextMessageNotifier(Observer):
def update(self, temperature):
print("Sending text message notification! Current temperature is %f" % temperature)
在上述代码中,我们定义了一个Subject类和一个Observer类。我们还定义了两个具体的观察者类,EmailNotifier和TextMessageNotifier。当温度发生变化时,我们使用set_temperature方法更新主题的状态,并使用notify_observers方法通知所有的观察者。每个观察者都实现了update方法,该方法接收当前温度,并执行相应的操作。
下面是一个使用上述代码的简单例子:
weather_station = Subject()
email_notifier = EmailNotifier()
text_message_notifier = TextMessageNotifier()
weather_station.register_observer(email_notifier)
weather_station.register_observer(text_message_notifier)
weather_station.set_temperature(25.6)
weather_station.set_temperature(27.8)
weather_station.remove_observer(email_notifier)
weather_station.set_temperature(30.2)
在这个例子中,我们创建了一个Subject对象和两个具体的观察者:EmailNotifier和TextMessageNotifier。然后我们将两个观察者注册到主题中,并更新温度。每当温度发生变化时,观察者都会得到通知,并执行相应的操作。接着我们从主题中删除了一个观察者,并再次更新温度。
这就是Python中Observer模式的简单实现。Observer模式可以帮助我们实现实时更新,并让多个观察者在主题状态发生变化时得到通知。在需要实现实时更新的应用程序中,Observer模式是非常有用的。