C++设计模式之观察者模式

观察者模式思想:
第一:首先你有个需要被事件通知的类;在这个类中你需要添加当观察者通知事件到来时响应的Update消息,和定义个观察者类指针用来传递观察者想要传递的消息(想加则加);
第二:观察者中你可以设置一个类对象容器,函数方法有2个,一个是添加对象到容器的方法和遍历容器中的对象,激活对象的Update()的消息;
此理解是本人所想,不对的可以纠正..

#include <iostream>
#include <string>
#include <vector>

class Secretary;


//lock Stock's stuff职工
class StockObserver
{
private:
std::string name;
Secretary* sub;
public:
StockObserver(std::string strname,Secretary* strsub)
{
name=strname;
sub=strsub;
}
void Update();
};

void StockObserver::Update()
{
std::cout<<":"<<sub->action<<"Don't play the TV"<<std::endl;
}


//秘书类(主题对象,通知者)----观察者
class Secretary
{
private:
std::vector<StockObserver> observers;//同事类对象容器
public:
std::string action; //给观察者传递的的消息

void Add(StockObserver ob) //给对象容器添加你要通知的对象
{
observers.push_back(ob);
}

void Notify()
{
std::vector<StockObserver>::iterator p=observers.begin();
//循环同志对象update
while(p!=observers.end())
{
(*p).Update();
p++;
}

}
};



int main() {
Secretary *p = new Secretary(); //Creat 通知者

// 观察者
StockObserver* player_one = new StockObserver("小李", p);
StockObserver* player_two = new StockObserver("小王", p);

//jion 同志队列
p->Add(*player_one);
p->Add(*player_two);
// 事件
p->action="老板来了(set notice text)";
//通知
p->Notify();
return 0;
}
原文地址:https://www.cnblogs.com/xuaidongstdudyrecording/p/6013784.html