C++设计模式---观察者
2015-09-10 19:53
435 查看
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()
{
}
CMyObserver.h:
#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()
{
}
CSubject.h :
#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();
}
定义:处理对象间一对多的关系,一个对象状态变化时,所有依赖他的对象都得到通知并自动更新。
使用场景:
对应异步任务,通知类型的操作(在这一点上有点类似回调的味道)。比如说 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()
{
}
CMyObserver.h:
#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()
{
}
CSubject.h :
#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();
}
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- PropertyChangeListener简单理解
- 关于指针的一些事情
- 什么是设计模式
- 设计模式之创建型模式 - 特别的变量问题
- 设计模式之行为型模式 - 调用行为的传递问题
- 七、设计模式——装饰模式
- 设计模式总结
- 设计模式之创建型模式
- 浅谈设计模式的学习
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- ruby 一些简单的例子
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C#观察者模式(Observer Pattern)实例教程
- C++联合体转换成C#结构的实现方法
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题