1 觀察者模式總結 C

2022-08-01 08:15:09 字數 1262 閱讀 3229

觀察者模式:定義了一種「一對多」的依賴關係,讓多個觀察者物件同時監聽乙個物件的改變,即當該物件的狀態發現改變時,會通知所有它依賴的觀察者物件。觀察者模式屬於行為模式。

意圖:定義物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。

主要解決:通知其他物件有乙個物件的狀態改變,而且同時要考慮到易用和低耦合,保證高度的協作。

何時使用:乙個物件(目標物件)的狀態發生改變,所有的依賴物件(觀察者物件)都將得到通知,進行廣播通知。

直白點,觀察者模式就是構建「事件」來通知某種狀態的改變。

觀察者模式提供了一種物件設計,讓主題和觀察者之間松耦合:

簡單的uml圖可以表示如下:

觀察者模式定義了四種角色:抽象主題、具體主題、抽象觀察者、具體觀察者。

抽象主題(subject):該角色是乙個抽象類或介面,定義了增加、刪除、通知觀察者物件的方法。

具體主題(concretesubject):該角色繼承或實現了抽象主題,定義了乙個集合存入註冊過的具體觀察者物件,在具體主題的內部狀態發生改變時,給所有註冊過的觀察者傳送通知。

抽象觀察者(observer):該角色是具體觀察者的抽象類,定義了乙個更新方法。

具體觀察者(concrereobserver):該角色是具體的觀察者物件,在得到具體主題更改通知時更新自身的狀態。

c++中具體存在的類各你的**設計有關,可能某個類同時承擔抽象主題和具體主題,或者抽象觀察者和具體觀察者的角色。

首先觀察者類:

class observer 

;class aobserver : public observer

};class bobserver : public observer

};

然後主題類:

class subjectbase;

class subjecttest : public subjectbase

void removeobserver(std::shared_ptrobserver) override

void notifyupdate() override

private:

std::list> observers_;

};

chromium**中有大量使用觀察者模式,比如網路的連線、應用的啟動和關閉等等。

C 程式設計模式1 觀察者模式

觀察者模式用於實現以下功能,有乙個觀察者類用以發布資訊,其他類繼承這個觀察者類,只訂閱自己想要操作的資訊。本例中,gateservice.h,gatesevice.cpp檔案用以實現觀察者類。dlglogin.h,dlglogin.cpp檔案用以實現訂閱資訊的類。具體實現如下 檔案 pragma o...

C 觀察者模式

觀察者模式 有時被稱作發布 訂閱模式,觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態發生變化時,會通知所有觀察者物件,使它們能夠自動更新自己。作用 在大的專案中,當乙個物件的狀態發生改變時可以通知其他相關的物件,這就可以用到觀察者模式。用以將多種物件...

觀察者模式C

當物件間存在一對多的關係,當狀態改變時,其他物件都得到通知,這就是觀察者模式了。觀察者模式實現發布 訂閱功能。如我們有個專案叫ngi,需要召開stanup會議,會議上需求變更時需要通過所有參加會議的人員,我們就可以使用觀察者模式,其uml圖如下 其 實現如下 include include incl...