观察者模式

观察者模式:定义了一种一对多的依赖关系,让多个观察者对象同时监听某一主题对象,在它的状态发生变化时,会通知所有的观察者.

#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;
    }
};
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容