c 設計模式之觀察者模式

2021-07-15 23:44:19 字數 1447 閱讀 4736

觀察者模式 observer

定義:觀察者模式定義了一種一對多的依賴關係,讓多個觀察者物件同時監聽某乙個主題物件。這個主題物件在狀態上發生變化時,會通知所有觀察者物件,讓它們能夠自動更新自己。

觀察者模式類結構圖:

觀察者模式的角色:

subject抽象主題角色:

把所有對觀察者物件的引用儲存在乙個集合中,每個抽象主題角色都可以有任意數量的觀察者。抽象主題提供乙個介面,可以增加和刪除觀察者角色。一般用乙個抽象類和介面來實現。

concretesubject具體主題角色:

在具體主題內部狀態改變時,給所有登記過的觀察者發出通知。具體主題角色通常用乙個子類實現。

observer抽象觀察者角色

為所有具體的觀察者定義乙個介面,在得到主題的通知時更新自己。

concreteobserver具體觀察者角色:

該角色實現抽象觀察者角色所要求的更新介面,以便使本身的狀態與主題的狀態相協調。通常用乙個子類實現。如果需要,具體觀察者角色可以儲存乙個指向具體主題角色的引用。

觀察者模式典型應用:

-偵聽時間驅動程式設計中的外部事件

-偵聽/監視某個物件的狀態變化

-發布者/訂閱者(publisher/subscriber)模型中,當乙個外部事件(新產品,訊息的出現等)被觸發是,通知郵件列表中的訂閱者。

適用場景:

定義物件間一種一對多的依賴關係,使得每乙個物件改變狀態,則所有依賴他們的物件都會得到通知。

使用場景:定義了一種一對多的關係,讓多個觀察者物件(公司員工)同時監聽乙個主題物件(秘書),主題物件狀態發生變化時,會通知所有觀察者,使得他們能夠更新自己。

兌現**:

#include #include"string"

#include "list"

using namespace std;

//秘書-

class secretary;

//玩遊戲的同事--觀察者

class playerobserver

void update(string action) }

void setplayerobserver(playerobserver*o)

private:

listm_list;

};void main()

c 設計模式之觀察者模式

觀察者模式定義了物件間的一對多依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都會得到通知並自動更新.觀察者與被觀察者之間使用松耦合方式結合 主題是真正擁有資料的人,觀察者是主題的依賴者,在資料變化時更新,比許多物件控制同乙份資料更乾淨 class observer 觀察者介面 class ...

C 設計模式之觀察者模式

觀察者設計模式定義了物件間的一對多的依賴關係,乙個物件的行為依賴於另乙個物件的狀態的情況下,當物件狀態發生變化時,依賴它的物件會得到通知並自動重新整理。觀察者模式中主要有兩種角色 觀察者和監聽者 觀察者主要是在事件到來時,通知對於該事件感興趣的監聽者來處理事件。所以它的職責也就顯而易見了 通知觀察者...

C 設計模式之觀察者模式

觀察者模式 建立與一種物件與物件之間的依賴關係,乙個物件發生改變時將自動通知其他物件,其他物件將相應作出反應。在觀察者模式中,發生改變的物件成為觀察目標,而被通知的物件稱為觀察者。乙個觀察目標對應多個觀察者 抽象的英雄 觀察者 class abstracthero class heroa publi...