概念:
观察者模式是一种行为模式,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。
提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。
应用:
1.侦听事件驱动程序设计中的外部事件
2.侦听/监视某个对象的状态变化
3.发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等)被触发时,通知邮件列表中的订阅者
实例:
观察者模式是一种行为模式,它的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。
提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。
应用:
1.侦听事件驱动程序设计中的外部事件
2.侦听/监视某个对象的状态变化
3.发布者/订阅者(publisher/subscriber)模型中,当一个外部事件(新的产品,消息的出现等等)被触发时,通知邮件列表中的订阅者
实例:
#include "stdafx.h"
#include <iostream>
#include <vector>
#include <string>
using namespace std;
class Secretary;
//观察者
class PlayserObserver
{
public:
PlayserObserver(string name, Secretary *secretary)
{
m_name = name;
m_secretary = secretary;
}
void update(string action)
{
cout << "观察者收到消息:" << action << endl;
}
private:
string m_name;
Secretary *m_secretary;
};
//通知者
class Secretary
{
public:
void addObserver(PlayserObserver *o)
{
v.push_back(o);
}
void Notify(string action)
{
for (vector<PlayserObserver *>::iterator it= v.begin(); it!=v.end(); it++ )
{
(*it)->update(action);
}
}
void setAction(string action)
{
m_action = action;
Notify(m_action);
}
private:
string m_action;
vector<PlayserObserver *> v;//需要维护的队列
};
void main()
{
//通知者
Secretary *s1 = new Secretary;
//具体观察者 被通知对象
PlayserObserver *po1 = new PlayserObserver("同事1", s1);
PlayserObserver *po2 = new PlayserObserver("同事2", s1);
s1->addObserver(po1);//当有新对象创建时,加入被通知队列
s1->addObserver(po2);
s1->setAction("放假了");
while(1);
return ;
}