一分鐘了解python的observer pattern
在Python中,Observer模式是一種行為型模式,它允許一個(gè)對象(稱為主題)向多個(gè)監(jiān)聽器(稱為觀察者)發(fā)送通知。這種模式通常用于需要實(shí)時(shí)更新的應(yīng)用程序中,例如股票價(jià)格更新、溫度計(jì)讀數(shù)等。在這種應(yīng)用中,我們希望當(dāng)主題發(fā)生變化時(shí),所有的觀察者都能夠及時(shí)得到通知,并進(jìn)行相應(yīng)的操作。
?下面我們通過一個(gè)簡單的例子來說明Python中的Observer模式。假設(shè)我們正在構(gòu)建一個(gè)氣象站應(yīng)用程序,該應(yīng)用程序可以測量外部溫度,并通知多個(gè)觀察者。在這種情況下,我們可以使用Observer模式來實(shí)現(xiàn)此功能。我們可以定義一個(gè)Subject類來表示主題,并定義一個(gè)Observer類來表示觀察者。當(dāng)溫度發(fā)生變化時(shí),我們可以通知所有的觀察者,并讓它們進(jìn)行相應(yīng)的操作。
?下面是Python中的實(shí)現(xiàn):
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)
在上述代碼中,我們定義了一個(gè)Subject類和一個(gè)Observer類。我們還定義了兩個(gè)具體的觀察者類,EmailNotifier和TextMessageNotifier。當(dāng)溫度發(fā)生變化時(shí),我們使用set_temperature方法更新主題的狀態(tài),并使用notify_observers方法通知所有的觀察者。每個(gè)觀察者都實(shí)現(xiàn)了update方法,該方法接收當(dāng)前溫度,并執(zhí)行相應(yīng)的操作。
?下面是一個(gè)使用上述代碼的簡單例子:
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)
在這個(gè)例子中,我們創(chuàng)建了一個(gè)Subject對象和兩個(gè)具體的觀察者:EmailNotifier和TextMessageNotifier。然后我們將兩個(gè)觀察者注冊到主題中,并更新溫度。每當(dāng)溫度發(fā)生變化時(shí),觀察者都會(huì)得到通知,并執(zhí)行相應(yīng)的操作。接著我們從主題中刪除了一個(gè)觀察者,并再次更新溫度。
?這就是Python中Observer模式的簡單實(shí)現(xiàn)。Observer模式可以幫助我們實(shí)現(xiàn)實(shí)時(shí)更新,并讓多個(gè)觀察者在主題狀態(tài)發(fā)生變化時(shí)得到通知。在需要實(shí)現(xiàn)實(shí)時(shí)更新的應(yīng)用程序中,Observer模式是非常有用的。