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圖示,就這的意思是,當你訂閱了該文章,如果後續有更新,會及時通知你。其實,簡單來講就一句話 當乙個物件變化時,其它依賴該物件的物件都會收到通知,並且隨著變化!物件之間是一種一對多的關係。...