C++实现观察者模式

发表于:2014-9-22 09:57

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:yjkwf    来源:51Testing软件测试网采编

  在工程中做代码的时候,经常会需要用到某个状态发生变化,要通知到需要了解该变化的类,Windows编程中经常用到的是发消息,要是没有Windows的消息机制的话,自己做一套消息机制倒是可以,但也是徒增了工作量,再次想到了设计模式中的观察者模式,也可以实现这个想法,具体实现如下:
  1、编写观察者和被观察者类,对该类做如下说明如下:
  1.1、观察者类,需要从Observer类继承,并且重写虚函数update()
  1.2、被观察者类,需要继承Observable类,并且调用addObserver()函数,添加观察者类的对象
  代码如下:
#ifndef__OBSERVER_H
#define__OBSERVER_H
#include<vector>
#include<algorithm>
#include<string>
#include"YtEvent.h"
classObservable;
classObserver
{
public:
virtualvoidupdate(Observable*from,YtEvent*e)=0;
};
classObservable
{
private:
std::vector<Observer*>_observers;
public:
Observable(){}
virtual~Observable()
{
_observers.clear();
}
//AdditionofObserver
voidaddObserver(Observer*ob)
{
if(std::find(_observers.begin(),_observers.end(),ob)==_observers.end())
{
_observers.push_back(ob);
}
}
//DeletionofObserver
voiddeleteObserver(constObserver*ob)
{
std::vector<Observer*>::iteratori=std::find(_observers.begin(),_observers.end(),ob);
if(i!=_observers.end())
{
_observers.erase(i);
}
}
//ItnotifiesObserver
voidnotifyObservers(YtEvent*e=NULL)
{
std::vector<Observer*>::reverse_iteratori=_observers.rbegin();
while(i!=_observers.rend())
{
(*i++)->update(this,e);
}
}
intcountObservers()const
{
return(int)_observers.size();
}
};
#endif//__OBSERVER_H
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号