行為型模型 觀察者模式

2021-09-07 15:37:01 字數 1514 閱讀 6858

subject(被觀察者)

被觀察的物件。當需要被觀察的狀態發生變化時,需要通知佇列中所有觀察者物件。subject需要維持(新增,刪除,通知)乙個觀察者物件的佇列列表。

concretesubject

被觀察者的具體實現。包含一些基本的屬性狀態及其他操作。

observer(觀察者)

介面或抽象類。當subject的狀態發生變化時,observer物件將通過乙個callback函式得到通知。

concreteobserver

觀察者的具體實現。得到通知後將完成一些具體的業務邏輯處理。

典型應用

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

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

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

適用於:

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

使用場景:

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

/*

* * 行為型模型 觀察者模式

* observer模式是行為模式之一,它的作用是當乙個物件的狀態發生變化時,能夠自動通知其他關聯物件,自動重新整理物件狀態。

* observer模式提供給關聯物件一種同步通訊的手段,使某個物件與依賴它的其他物件之間保持狀態同步。 *

*/#define _crt_secure_no_warnings#include

#include

#include

//前置宣告

class

secretary;

class

playerobserver

void update(std::string

action)

private

: std::

string

m_name;

secretary *m_secretary;

};class

secretary

void notify(std::string

action)

}void setaction(std::string

action)

private

: std::

string

m_action;

std::vector

v;};

void

mytest()

intmain()

行為型模式 觀察者模式

物件間的一種一對多的依賴關係,當乙個物件的狀態發生改變時,所有依賴於它的物件都得到通知並被自動更新。subject 抽象的主題,被觀察的物件,提供 attach 和detach observer 物件的介面。concretesubject 具體的被觀察物件,維持 concretesubject 狀態...

行為型模式 觀察者模式

抽象觀察者,及具體觀察者 class abstractobserver class student public abstractobserver virtual void dobadthing 老師沒來應該幹什麼 virtual void onteachercoming 老師來了應該幹什麼 pri...

十六 行為型模式 觀察者模式

一 觀察者模式 觀察者模式很好理解,類似於郵件訂閱和rss訂閱,當我們瀏覽一些部落格或wiki時,經常會看到rss圖示,就這的意思是,當你訂閱了該文章,如果後續有更新,會及時通知你。其實,簡單來講就一句話 當乙個物件變化時,其它依賴該物件的物件都會收到通知,並且隨著變化!物件之間是一種一對多的關係。...