viktormoskalenko
6/22/2018 - 7:17 PM

CPP: Observer Design Pattern

#include <iostream>
#include <vector>

class Entity
{
};

enum Event
{
    SOME_EVENT_A,
    SOME_EVENT_B,
};

class Observer
{
public:
    virtual ~Observer() {}
    
    // The parameters can be adjusted for specific need
    virtual void OnNotify(const Entity& entity, Event event);
};

class Ahievements : public Observer
{
public:
    virtual void OnNotify(const Entity& entity, Event event)
    {
        switch(event)
        {
            case SOME_EVENT_A:
                // Do something
                break;
            case SOME_EVENT_B:
                // Do something
                break;
        }
    }
};

class Subject
{
public:

    void OnNotify(const Entity& entity, Event event)
    {
        for(Observer* o : _observers)
        {
            o->OnNotify(entity, event);  
        }
    }
    
    void AddObserver(Observer* observer)
    {
        // Add to array
    }
    
    void RemoveObserver(Observer* observer)
    {
        // Remove from array
    }

    std::vector<Observer*> _observers;
}

class Physics : public Subject
{
    
}

int main()
{
    return 0;
}