观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,在它的状态发生变化时,会通知所有的观察者.
#include<list>
#include<iostream>
using namespace std;
class TecherListenner;
class TecherListenner;
class INotifier{
public:
virtual void addListenner(TecherListenner* listenner)=0;
virtual void removeListenner(TecherListenner* listenner) = 0;
virtual void notify() = 0;
};
//然后班长作为一个具体的通知者:
class TecherNotifier:public INotifier{
public:
virtual ~TecherNotifier(){}
virtual void addListenner(TecherListenner* listenner){
m_listenners.push_back(listenner);
}
virtual void removeListenner(TecherListenner* listenner)
{
m_listenners.remove(listenner);
delete listenner;
}
virtual void notify()
{
for( auto & i : m_listenners)
{
i->onTecherComming();
}
}
private:
std::list<TecherListenner*> m_listenners;
};
// 定义一个监听者的接口,想要监听老师来了这个消息的同学必须要实现这个接口:
class TecherListenner{
virtual void onTecherComming()=0;
};
class XiaoZhang : public TecherListenner{
public:
virtual~XiaoZhang(){}
virtual void onTecherComming()
{
stopCopyWork();
}
void stopCopyWork()
{
std::cout<<"老师来了,停止抄作业!"<<endl;
}
};
class XiaoLi : public TecherListenner{
public:
virtual~XiaoLi(){}
virtual void onTecherComming()
{
stopPlayGame();
}
void stopPlayGame()
{
cout<<"老师来了,停止玩游戏机!"<<endl;
}
};