observer(观察者模式)
观察者模式主要解决的问题是:
- 多个类对同一个数据的关注
适用于:
- 一个数据的多种展示方式
- 进度条
-
等
observer.png
观察者接口定义
/**
* 观察者接口
*/
class observerInterface
{
public:
virtual void showData(int n)=0;
~observerInterface(){}
};
观察者实现1
/**
* 观察者1
*/
class observerOne : public observerInterface
{
public:
virtual void showData(int n)
{
cout<<"观察者1被通知,数据"<<n<<endl;
}
};
观察者实现2
/**
* 观察者2
*/
class observerTwo : public observerInterface
{
public:
virtual void showData(int n)
{
cout<<"观察者2被通知,数据"<<n<<endl;
}
};
模拟进度条数据通知观察者
/**
* 进度条
*/
class dataDeal
{
protected:
//所有观察者
std::list<observerInterface*> observers;
public:
void dealData()
{
for(int i=0; i<5; i++)
{
//通知所有观察者
tellObserver(i);
}
}
void addObserver(observerInterface* ob)
{
observers.push_back(ob);
}
void removeObserver(observerInterface* ob)
{
observers.remove(ob);
}
void tellObserver(int i)
{
for(auto p : observers)
{
p->showData(i);
}
}
};
测试
#include <iostream>
#include <list>
using namespace std;
int main(int argc, char const *argv[]) {
dataDeal* dp = new dataDeal();
dp->addObserver(new observerOne());
dp->addObserver(new observerTwo());
dp->dealData();
return 0;
}
observer.png
网友评论