觀察者 設計模式

2021-09-11 06:39:09 字數 1350 閱讀 9074

知識點

觀察者知識要點

定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。觀察者模式的特點是主體類的基類處理與觀察者的操作,繫結觀察者,解繫結觀察者,通知觀察者等,主體類的實現類在需要通知的方法中呼叫基類的通知方法即可,不需要關心通知的細節(細節被封裝在主體的基類中)。而在觀察者的實現類中,需要設計乙個指向主體的指標,這個指標的作用是為具體的觀察者物件繫結被觀察的主體。觀察者類中有乙個通用的狀態更新的方法,主體的基類來呼叫這個方法實現觀察者類中狀態的更新。

觀察者模式是很常見的模式。mvc中的m是這裡的主體類,v是這裡的觀察者類。

參考 示例

為什麼基類要用虛析構函式?

c++中基類採用virtual虛析構函式是為了防止記憶體洩漏。具體地說,如果派生類中申請了記憶體空間,並在其析構函式中對這些記憶體空間進行釋放。假設基類中採用的是非虛析構函式,當刪除基類指標指向的派生類物件時就不會觸發動態繫結,因而只會呼叫基類的析構函式,而不會呼叫派生類的析構函式。那麼在這種情況下,派生類中申請的空間就得不到釋放從而產生記憶體洩漏。所以,為了防止這種情況的發生,c++中基類的析構函式應採用virtual虛析構函式。

#include#includeusing namespace std;

class observer // 觀察者基類

;class subject // 主體基類,被觀察的物件,包含對觀察者類的繫結,解繫結,通知操作

; //預設建構函式

public:

virtual ~subject(){}; //預設析構函式,必須有

virtual void attach(observer* observer) //繫結乙個觀察者類

virtual void detach(observer* observer) //解繫結乙個觀察者類

virtual void notify() // 通知所有的觀察者更新狀態值。

};class concretesubject:public subject // 具體主體類,繼承主體基類

//建構函式

int getstate() //檢視狀態

void setstate(int newstate) //設定狀態

};class concreteobserver:public observer // 具體觀察者類,繼承觀察者基類

~concreteobserver() //析構函式,解繫結自己。

virtual void update() // 觀察者更新自己,一般通過具體主體類的notify方法類呼叫,將主體類的狀態更新到觀察者自己身上來

};int main()

鏈結

python 設計模式 觀察者 觀察者設計模式

在觀察者設計模式這種模式中,物件被表示為等待事件觸發的觀察者。一旦發生指定的事件,觀察者就會關注該主體。當事件發生時,主體告訴觀察者它已經發生。以下uml圖表示觀察者模式 如何實現觀察者模式?現在讓我們來看看如何實現觀察者模式。參考以下實現 import threading import time ...

觀察者設計模式

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

設計模式 觀察者

1.核心 觀察者模式主要用於1 n的通知。當乙個物件 目標物件subject或者objservable 的狀態變化時,需要告知一系列物件 觀察者物件,observer 讓他們做出響應 通知觀察者的方式 推 每次都把通知以廣播的方式傳送給所有觀察者,所有觀察者只能被動接收 拉 觀察者知道有訊息,至於什...