Initial Commit
[fltk_mvc_template.git] / _template / src / Observer.h
1 ///////////////////////////////////////////////////////////////////////////
2 // Workfile: Observer.h
3 // Author: Daniel Giritzer <daniel@giritzer.eu>
4 // Date: 25.03.2018
5 // Description: Interface für eine Observer Klasse.
6 // Remarks: -
7 ///////////////////////////////////////////////////////////////////////////
8 #ifndef OBSERVER_H_INCLUDED
9 #define OBSERVER_H_INCLUDED
10
11 #include <memory>
12 #include <list>
13 #include "Object.h"
14
15 class Subject;
16
17 /////////////////////////////////////////////////
18 /// \brief Interface fuer einen Observer.
19 /////////////////////////////////////////////////
20 class Observer : public Object
21 {
22 public:
23     /////////////////////////////////////////////////
24     /// \brief Diese Funktion wird in der Implementierung
25     ///        bei änderungen eines überwachten Objektes
26     ///        aufgerufen.
27     /// \param s Objekt mit änderungen.
28     /////////////////////////////////////////////////
29     virtual void updatedBySubject(Subject* s) = 0;
30
31     /////////////////////////////////////////////////
32     /// \brief Füge ein zu überwachendes Objekt hinzu.
33     /// \param s Zu überwachendes Objekt.
34     /////////////////////////////////////////////////
35     void subscribeSubject(Subject* s);
36
37     /////////////////////////////////////////////////
38     /// \brief Entferne ein überwachtes Objekt.
39     /// \param s Bereits überwachetes Objekt.
40     /////////////////////////////////////////////////
41     void unsubscribeSubject(Subject* s);
42
43     /////////////////////////////////////////////////
44     /// \brief Von Subject Klassen verwendete funktion
45     ///        um Observer über änderungen zu
46     ///        benachrichtigen.
47     /// \param s Objekt mit änderungen.
48     /////////////////////////////////////////////////
49     void updateObserver(Subject* s);
50
51 protected:
52     Observer() = default;
53     std::list<Subject*> mSubjects;
54
55 };
56
57 #endif // OBSERVER_H_INCLUDED