觀察者模式

2021-06-28 01:39:17 字數 1435 閱讀 3914

觀察者模式屬於行為型模式,其意圖是定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。在製作系統的過程中,將乙個系統分割成一系列相互協作的類有乙個常見的***:需要維護相關物件間的一致性。我們不希望為了維持一致性而使各類緊密耦合,因為這樣降低了他們的可充用性。這乙個模式的關鍵物件是目標(subject)和觀察者(observer)。乙個目標可以有任意數目的依賴它的觀察者,一旦目標的狀態發生改變,所有的觀察者都得到通知,作為對這個通知的響應,每個觀察者都將查詢目標以使其狀態與目標的狀態同步。這種互動也稱為發布-訂閱模式,目標是通知的發布者。他發出通知時並不需要知道誰是他的觀察者,可以有任意資料的觀察者訂閱並接收通知。
參與者:

beobserver(目標,beobserver):

目標知道它的觀察者。可以有任意多個觀察者觀察同乙個目標。

提供註冊和刪除觀察者物件的介面。

observer(觀察者,observer):為那些在目標發生改變時需要獲得通知的物件定義乙個更新介面。

相關**:

///觀察者**方法

@protocol observerdelegate - (void) update:(nsstring *)name; //被觀察物件發生變化,呼叫觀察者的update方法

@end

/** * 觀察者,需要實現observerdelegate協議

*/@inte***ce observer : nsobject@property(nonatomic, copy)nsstring *name;

@end

/** * 被觀察者

*/@inte***ce beobserver : nsobject

@property(nonatomic, copy) nsstring *name;

@property(nonatomic, strong) nsmutablearray *observerlists;

- (void)addobserver:(id)observer;

- (void)removeobserver:(id)observer;

- (void)notify;

@end

@implementation observer

- (id)init

return self;

}- (void) update:(nsstring *)name

@end

@implementation beobserver

- (id)init

return self;

}- (void)addobserver:(id)observer

- (void)removeobserver:(id)observer

- (void)notify

}}@end

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

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

觀察者模式

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

觀察者模式

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