Select Git revision
ObserverPattern.hpp

Armin Co authored
ObserverPattern.hpp 700 B
/// Subject of oberver pattern
#ifndef OBSERVER_PATTERN_HPP
#define OBSERVER_PATTERN_HPP
#include <vector>
#include <memory>
/// Type sub has to be an observable subject.
template<typename T>
class IObserver
{
public:
virtual void update(const T &subject) = 0;
};
template<typename Observer, typename Value>
class Subject
{
public:
virtual ~Subject() = default;
void attach(std::shared_ptr<Observer> observer){
m_observers.push_back(observer);
}
protected:
void notify(const Value &value) const{
for (auto observer : m_observers){
observer->update(value);
}
}
private:
std::vector<std::shared_ptr<Observer>> m_observers;
};
#endif