python 觀察者模式

2022-07-10 10:21:12 字數 1531 閱讀 3742

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 如果乙個被...