C++实现观察者模式
作者:网络转载 发布时间:[ 2014/9/22 10:49:28 ] 推荐标签:软件开发 Net C++
在工程中做代码的时候,经常会需要用到某个状态发生变化,要通知到需要了解该变化的类,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
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11