設計模式 觀察者模式 C++實現

觀察者模式(Observer)定義了對象間一對多的聯繫。當一個對象的狀態發生變化時,所有與它有聯繫的觀察者對象都會得到通知。觀察者模式將被觀察的目標和觀察者解耦,一個目標可以有任意多的觀察者,觀察者也可以觀察任意多的目標,構成複雜的聯繫,而每個觀察者都不知道其他觀察者的存在。

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


C++實現:

#include <iostream>

#include <vector>

#include <string>

using namespace std;

 

// 看股票的同事類(觀察對象,觀察者)

class Secretary;

class StockObserver

{

public:

StockObserver(string strName, Secretary* strSub)

{

name = strName;

sub = strSub;

}

void Update();

 

private:

string name;

Secretary* sub;

};

 

// 祕書類(主題對象,通知者)

class Secretary

{

public:

string action;

void Add(StockObserver ob) { observers.push_back(ob); }

void Notify()

{

vector<StockObserver>::iterator it;

for (it=observers.begin(); it!=observers.end(); ++it)

{

(*it).Update();

}

}

 

private:

vector<StockObserver> observers;

};

 

void StockObserver::Update()

{

cout << name << " : " << sub->action << ", begin to work" << endl;

}

 

int main()

{

// 創建通知者

Secretary* p = new Secretary();

// 觀察者

StockObserver* s1 = new StockObserver("Lazy", p);

StockObserver* s2 = new StockObserver("SnowFire", p);

// 加入通知隊列

p->Add(*s1);

p->Add(*s2);

// 事件

p->action = "The boss is coming...";

// 通知

p->Notify();

return 0;

}

 

參考:大話設計模式實現(C++版)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章