2020-02-06 15:39:21 +00:00
|
|
|
#pragma once
|
|
|
|
|
|
|
|
#include <Arduino.h>
|
|
|
|
|
|
|
|
#include <list>
|
|
|
|
|
|
|
|
class Observable;
|
|
|
|
|
|
|
|
class Observer
|
|
|
|
{
|
|
|
|
Observable *observed;
|
|
|
|
|
2020-03-19 02:15:51 +00:00
|
|
|
public:
|
2020-02-06 15:39:21 +00:00
|
|
|
Observer() : observed(NULL) {}
|
|
|
|
|
|
|
|
virtual ~Observer();
|
|
|
|
|
|
|
|
void observe(Observable *o);
|
|
|
|
|
2020-03-19 02:15:51 +00:00
|
|
|
private:
|
2020-02-06 16:49:33 +00:00
|
|
|
friend class Observable;
|
|
|
|
|
2020-02-06 15:39:21 +00:00
|
|
|
virtual void onNotify(Observable *o) = 0;
|
|
|
|
};
|
|
|
|
|
|
|
|
class Observable
|
|
|
|
{
|
|
|
|
std::list<Observer *> observers;
|
|
|
|
|
2020-03-19 02:15:51 +00:00
|
|
|
public:
|
2020-02-06 15:39:21 +00:00
|
|
|
void notifyObservers()
|
|
|
|
{
|
2020-03-19 02:15:51 +00:00
|
|
|
for (std::list<Observer *>::const_iterator iterator = observers.begin(); iterator != observers.end(); ++iterator) {
|
2020-02-06 15:39:21 +00:00
|
|
|
(*iterator)->onNotify(this);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2020-03-19 02:15:51 +00:00
|
|
|
void addObserver(Observer *o) { observers.push_back(o); }
|
2020-02-06 15:39:21 +00:00
|
|
|
|
2020-03-19 02:15:51 +00:00
|
|
|
void removeObserver(Observer *o) { observers.remove(o); }
|
2020-02-06 15:39:21 +00:00
|
|
|
};
|