设计模式之观察者模式
前言
观察者模式,简单理解就是建立了一个一对多的关系,多个观察者观察一个目标,只要目标发生变化,所有的观察者都会接收被观察者有更新的消息,进而做出相应的动作。
可以举个例子来理解,比如说我们很多人都订阅了某一个公众号,当公众号发送了一篇文章,我们就都会知道公众号更新了,然后就可以查看文章。在这个过程就中,关注公众号的人可以理解为观察者,而公众号就是被观察者,当被观察者有状态更新,就会通知所有的观察者。
代码
代码
- 通过代码来简单实现
#include <iostream>
#include <list>
using namespace std;
class Observer
{
public:
Observer() {}
virtual ~Observer() {}
virtual int update() = 0;
};
class ObserverA: public Observer
{
public:
ObserverA() {}
virtual ~ObserverA() {}
virtual int update()
{
cout << "OBserver A update" << endl;
return 0;
}
};
class ObserverB: public Observer
{
public:
ObserverB() {}
virtual ~ObserverB() {}
virtual int update()
{
cout << "OBserver B update" << endl;
return 0;
}
};
class Object
{
public:
Object() {}
virtual ~Object() {}
int attach(Observer *observer)
{
m_list.push_back(observer);
return 0;
}
int detach(Observer *observer)
{
m_list.remove(observer);
return 0;
}
int notify()
{
std::list<Observer *>::iterator it;
for (it = m_list.begin(); it != m_list.end(); it++)
{
(*it)->update();
}
return 0;
}
private:
list<Observer *> m_list;
};
int main()
{
Object object;
Observer *observera = new ObserverA;
Observer *observerb = new ObserverB;
object.attach(observera);
object.attach(observerb);
object.notify();
object.detach(observera);
object.detach(observerb);
delete observera;
delete observerb;
return 0;
}
程序运行结果:
OBserver A update
OBserver B update
- 简单分析
在这个例子中,我们实例化两个观察者:observera、observera,然后被观察者object把observera和observera加入到自己的观察者列表中。object调用notify函数通知所有观察者,那么所有观察者都会收到观察者有更新的信息,然后就可以做出相应的调整
与我联系
微信公众号,扫二维码即可关注: