美文网首页
观察者模式

观察者模式

作者: 钟离惜 | 来源:发表于2020-11-02 11:03 被阅读0次

    定义一对多的依赖关系,让多个观察者对象同时监听一个主对象。当这个主对象的动态发生变化时,会通知所有观察者对象,让其更新自己。

    观察者模式角色如下:
    抽象主题(Subject)角色:抽象主题角色提供维护一个观察者对象集合的操作方法,对集合的增加、删除等。
    具体主题(ConcreteSubject)角色:将有关状态存入具体的观察者对象;在具体主题的内部状态改变时,给所有登记过的观察者发通知。具体主题角色负责实现抽象主题中的方法。
    抽象观察者(Observer)角色:为具体观察者提供一个更新接口。
    具体观察者(ConcreteObserver)角色:存储与主题相关的自洽状态,实现抽象观察者提供的更新接口。

    下面是一个定时器监控观察者,处理定时器的实例代码。

    #include <set>
    #include <iostream>
    #include <vector>
    #include <list>
    
    class Timer;
    class TimerManager
    {
    public:
        void OnTimer()
        {
            for (auto ite : listeners)
            {
                ite->OnTimer();
            }
        }
    private:
        void RemoveTimer(Timer* timer)
        {
            std::set<Timer*>::iterator ite = listeners.find(timer);
            if (ite != listeners.end())
            {
                listeners.erase(ite);
            }
        }
        void RegisterTimer(Timer* timer)
        {
            if (listeners.find(timer) == listeners.end())
            {
                listeners.insert(timer);
            }
        }
    private:
            std::set<Timer*>            listeners;
    };
    class Timer
    {
    public:
        void OnTimer() { /*do something*/};
    };
    

    相关文章

      网友评论

          本文标题:观察者模式

          本文链接:https://www.haomeiwen.com/subject/wulxvktx.html