觀察者模式,我們有很多其他的方式來稱呼它。比如熟悉的發布/訂閱模式,**方式,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 完美的將觀察者和被觀察的物件分離開。舉個例子,使用者介面可以作為乙個觀察者,業務資料是被觀察者,使用者介面觀察業務資料的變化,發現資料變化後,就顯示在介面上。物件導向設計的乙個原則是 系統中的每個類將重點放在某乙個功能上,而不是其他方面。乙個物件只做一件事情,並且將他做...
觀察者模式
觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,讓他們能夠自動更新自己 任何乙個模式都是離不開角色的,這裡也會有幾種角色 抽象主題角色 把所有對觀察者物件的引用儲存在乙個集合中,每個抽象主題角色都可以有任意數量的觀察...