设计模式 观察者模式 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++版)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值