C++设计模式---观察者
定义:处理对象间一对多的关系,一个对象状态变化时,所有依赖他的对象都得到通知并自动更新。
使用场景:
对应异步任务,通知类型的操作(在这一点上有点类似回调的味道)。比如说 A调用B完成一件事,触发一个状态,B收到后告诉A调用成功,但是B做这件事的结果并不知晓,等到B做完后(状态变化了),再通知A做的结果。
代码实现:
CObserver.h:
#ifndef COBSERVER_H
#define COBSERVER_H
class CObserver
{
public:
CObserver();
~CObserver();
public:
virtual void NotifyEvent();
};
#endif // COBSERVER_H
CObserver.cpp:
#include "cmyobserver.h"
CObserver::CObserver()
{
}
CObserver::~CObserver()
{
}
void CObserver::NotifyEvent()
{
}
#ifndef CMYOBSERVER_H
#define CMYOBSERVER_H
#include "cobserver.h"
class CMyObserver : public CObserver
{
public:
CMyObserver();
~CMyObserver();
public:
virtual void NotifyEvent();
};
#endif // CMYOBSERVER_H
CMyObserver.cpp:
#include "cmyobserver.h"
CMyObserver::CMyObserver()
{
}
CMyObserver::~CMyObserver()
{
}
void CMyObserver::NotifyEvent()
{
}
#ifndef CSUBJECT_H
#define CSUBJECT_H
#include <vector>
#include "cobserver.h"
class CSubject
{
public:
CSubject();
virtual ~CSubject();
void SetObserver(CObserver* pObserver);
void DoSomething();
private:
std::vector<CObserver*> m_vectObserver;
};
#endif // CSUBJECT_H
CSubject.cpp :
#include "csubject.h"
CSubject::CSubject()
{
m_vectObserver.clear();
}
CSubject::~CSubject()
{
}
void CSubject::SetObserver(CObserver* pObserver)
{
if ( pObserver != NULL)
{
m_vectObserver.push_back(pObserver);
}
}
void CSubject::DoSomething()
{
for (size_t i = 0; i < m_vectObserver.size(); i++)
m_vectObserver.at(i)->NotifyEvent();
}