美文网首页
C++11观察者模式

C++11观察者模式

作者: FredricZhu | 来源:发表于2021-07-16 11:36 被阅读0次

    题目,


    image.png

    构造函数时subscribe,并notify
    析构函数时unsubscribe,并notify。
    纯粹的观察者模式。

    代码如下,

    #include <iostream>
    #include <vector>
    #include <algorithm>
    
    using namespace std;
    
    struct IRat {
        int attack{1};
    };
    
    struct Game
    {
        vector<IRat*> rats;
        
        void notify() {
            for(auto&& rat: rats)  {
                rat->attack = rats.size();
            }
        }
        
        void subscribe(IRat* rat) {
            rats.push_back(rat);
        }
        
        void unsubscribe(IRat* rat) {
            auto result = find(begin(rats), end(rats), rat);
            rats.erase(result);
        }
    };
    
    struct Rat : IRat
    {
        Game& game;
        
        Rat(Game &game) : game(game)
        {
            game.subscribe(this);
            game.notify();
        }
    
        ~Rat() 
        { 
            game.unsubscribe(this);
            game.notify();
        }
    };
    

    相关文章

      网友评论

          本文标题:C++11观察者模式

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