Observer 模式的作用是当一个对象的状态发生变化时,能够自动通知其他关联对象,自动刷新对象状态。提供给关联对象一种同步通信的手段,使某个对象与依赖它的其他对象之间保持状态同步。
观察者模式适用于:定义对象间一种一对多的依赖关系,使得每一个对象改变状态,则所有依赖于他们的
对象都会得到通知。
class Secretary;
class PlayserObserver
{
public:
PlayserObserver(string name, Secretary* secretary)
{
m_name = name;
m_secretary = secretary;
}
void update(string action)
{
cout << "观察者收到 action:" << 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;
};
int main() {
//subject 被观察者
Secretary* s1 = new Secretary;
//具体的观察者 被通知对象
PlayserObserver* po1 = new PlayserObserver("小张", s1);
PlayserObserver *po2 = new PlayserObserver("小李", s1);
s1->addObserver(po1);
s1->addObserver(po2);
s1->setAction("老板来了");
s1->setAction("老板走了");
system("pause");
return 0;
}