觀察者模式 又叫發佈-訂閱模式
定義了一種一對多的依賴關係,讓多個觀察者對象同時監聽一個主題對象。當這個主題對象的狀態發生變化時通知所有的觀察者對象,讓他們自動更新自己的狀態。
俗話說,“螞蟻搬家蛇過道,明日必有大雨到”。現在我們反過來,大雨將要來歷的時候,螞蟻開始搬家,蛇出來遛彎。
定義一個基類,Animal
class Animal:
def update(self):
self.do_something(self)
def do_something(self):
pass
螞蟻類和蛇類分別去繼承Animall類和實現方法
class Ant(Animal):
def do_something(self):
print("螞蟻開始搬家")
class Snake(Animal):
def do_something(self):
print("蛇出洞遛彎")
雨類
class Rain:
observer_list = []
state = 1
def register_observer(self, animal):
# 註冊觀察者
self.observer_list.append(animal)
def notify_all_observers(self):
# 通知所有觀察者更新自己的狀態
for observer in self.observer_list:
observer.update(observer)
def do_something(self):
# state 爲0 表示要下雨了,爲1表示晴天
if self.state == 0:
print("馬上要下大雨了")
self.notify_all_observers()
else:
print("晴天")
測試代碼
rain = Rain()
# 註冊觀察者Ant
rain.register_observer(Ant)
# 註冊觀察者Snake
rain.register_observer(Snake)
rain.do_something()
rain.state = 0
rain.do_something()