概念
观察者模式:当一个对象的状态发生变化时,能自动通知其他关联对象,自动刷新对象。
观察者模式提供提供给关联对象的一种同步通信手段,使某个对象和依赖它的对象之间保持同步状态。
典型应用
- 侦听事件驱动程序设计中的某个外部事件
- 侦听某个对象的状态变化
- 发布者/订阅者模型中,当一个外部事件(消息)被触发时,通知邮件列表中的订阅者。
总结:定义了对象间的一对多的关系,当每一个对象状态发生变化时,则依赖它的每个对象都会得到通知。
案例
class Listener
{
public:
virtual void update() = 0;
};
class Notify
{
public:
virtual void addListener(Listener* listener) = 0;
virtual void notify() = 0;
};
class Subcriber:public Listener
{
public:
virtual void update()
{
cout << m_name << " view the news" << endl;
}
Subcriber(string name)
{
m_name = name;
}
private:
string m_name;
};
class Publisher : public Notify
{
public:
virtual void addListener(Listener* listener)
{
list.push_back(listener);
}
virtual void notify()
{
for (Listener* item : list)
{
item->update();
}
}
private:
vector<Listener*> list;
};
int main(int argc, char *argv[])
{
Listener* subcriber1 = new Subcriber("xiaoMing");
Listener* subcriber2 = new Subcriber("Tom");
Notify* publisher = new Publisher();
publisher->addListener(subcriber1);
publisher->addListener(subcriber2);
publisher->notify();
delete subcriber1;
delete subcriber2;
delete publisher;
system("pause");
}