觀察者模式小記

2022-09-07 05:42:11 字數 1728 閱讀 6274

觀察者模式,我們有很多其他的方式來稱呼它。比如熟悉的發布/訂閱模式,**方式,listen監聽等。

我們看到很多原始碼中有observer,listen,hook,callback,基本用到了觀察者模式;

話不多說,直接來點**說明下

首先定義被觀察者(抽象的,公有的)

public

inte***ce

subject

再定乙個被觀察者自身操作的介面

public

inte***ce

iuser

再定義乙個公用的被觀察者實現類(這裡可有可無,也可放到下面具體的觀察者中)

public

abstract

class abstractsubject implements

subject

@override

public

void

add(observer observer)

@override

public

void

del(observer observer)

@override

public

void

notifyobservers(string content) }}

接下來就是定義具體的被觀察者

public

class mysubject extends abstractsubject implements

iuser

}

被觀察者有了,接下來就是觀察者了

首先定義下觀察者介面

public

inte***ce

observer

然後定義具體的觀察者

public

class observer1 implements

observer

}

最後就是具體的實現了

public

class

observertest

}

我們新增觀察者,然後被觀察者一有行動,觀察者就能收到資訊,並作出反應。

上述執行結果如下:

以上就是簡單的闡釋下觀察者模式,實際中我們用到的場景比這複雜很多。

觀察者模式在實際專案和生活中非常常見,我們舉幾個經常發生的例子來說明。

● 檔案系統

比如,在乙個目錄下新建立乙個檔案,這個動作會同時通知目錄管理器增加該目錄,並 通知磁碟管理器減少1kb的空間,也就說「檔案」是乙個被觀察者,「目錄管理器」和「磁碟管理 器」則是觀察者。

● 貓鼠遊戲

夜裡貓叫一聲,家裡的老鼠撒腿就跑,同時也吵醒了熟睡的主人,這個場景中,「貓」就

是被觀察者,老鼠和人則是觀察者。

● atm取錢

比如你到atm機器上取錢,多次輸錯密碼,卡就會被atm吞掉,吞卡動作發生的時

候,會觸發哪些事件呢?第一,攝像頭連續快拍,第二,通知監控系統,吞卡發生;第三, 初始化atm機螢幕,返回最初狀態。一般前兩個動作都是通過觀察者模式來完成的,後乙個

動作是異常來完成。

● 廣播收音機

電台在廣播,你可以開啟乙個收音機,或者兩個收音機來收聽,電台就是被觀察者,收

音機就是觀察者。

python觀察者模式 python 觀察者模式

python 觀察者模式 前言e 寫的倉促就不截uml類圖了,書本chapter10,p313能看到圖 一旦觀察的主題有更新,就會通知到觀察者們,下面的例子是最簡單的乙個觀察者範例,假設這是一群投機分子密切關注 軍 火 倉庫的產品與數量變動 class inventory def init self...

觀察者模式

觀察者模式 observer 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...

觀察者模式

觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,讓他們能夠自動更新自己 任何乙個模式都是離不開角色的,這裡也會有幾種角色 抽象主題角色 把所有對觀察者物件的引用儲存在乙個集合中,每個抽象主題角色都可以有任意數量的觀察...