emm寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖
一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注(軍 火)倉庫的產品與數量變動
class inventory:
def __init__(self):
self.observers =
self._product = none
self._quantity = 0
def attach(self, observer):
@property
def product(self):
return self._product
@product.setter
def product(self, value):
self._product = value
self._update_observers()
@property
def quantity(self):
return self._quantity
@quantity.setter
def quantity(self, value):
self._quantity = value
self._update_observers()
def _update_observers(self):
for observer in self.observers:
observer()
class consoleobserver:
def __init__(self, inventory, name):
self.inventory = inventory
self.name = name
def __call__(self):
print(self.name, " ", self.inventory.product)
print(self.name, " ", self.inventory.quantity)
if __name__ == "__main__":
i = inventory()
c = consoleobserver(i, "c1")
i.attach(c)
c2 = consoleobserver(i, "c2")
i.attach(c2)
i.quantity = "gun"
i.quantity = 7
這裡稍微修改了下書本的**,讓我們能更清晰的看到是哪個觀察者收到的通知。
關鍵點在於callable函式,其將consoleobserver變成乙個可以呼叫的函式,於是我們一更新倉庫的動靜(呼叫set方法),就會觸發_update_observers,因此投機分子收到訊息然後print他們的情報(狗頭)
複習再緊張也不能忘記製造有趣
python觀察者模式 python 觀察者模式
python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...
python 設計模式 觀察者 觀察者設計模式
在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...
Python觀察者模式
1 2定義定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新 角色抽象發布者 subject 具體發布者 concretesubject 抽象觀察者 obeserver 優點1 觀察者和被觀察者是抽象耦合的。2 建立一套觸發機制。缺點1 如果乙個被...