Initial Commit
[fltk_mvc_template.git] / _template / src / Subject.h
1 ///////////////////////////////////////////////////////////////////////////
2 // Workfile: Subject.h
3 // Author: Daniel Giritzer <daniel@giritzer.eu>
4 // Date: 25.03.2018
5 // Description: Interface für von Observer zu überwachende Objekte.
6 // Remarks: -
7 ///////////////////////////////////////////////////////////////////////////
8 #ifndef SUBJECT_H_INCLUDED
9 #define SUBJECT_H_INCLUDED
10
11 #include <memory>
12 #include <list>
13 #include "Observer.h"
14 #include "Object.h"
15
16 /////////////////////////////////////////////////
17 /// \brief Interface für ein von einem Observer
18 ///        zu überwachendes Objekt.
19 /////////////////////////////////////////////////
20 class Subject : public Object
21 {
22 public:
23
24     /////////////////////////////////////////////////
25     /// \brief Füge einen Observer hinzu.
26     /// \param o Pointer auf ein Observer Objekt.
27     /////////////////////////////////////////////////
28     virtual void subscribeObserver(Observer* o);
29
30     /////////////////////////////////////////////////
31     /// \brief Entferne ein Observer Objekt.
32     /// \param o Pointer auf zu entfernendes Observer
33     ///        Objekt.
34     /////////////////////////////////////////////////
35     virtual void unsubscribeObserver(Observer* o);
36
37     /////////////////////////////////////////////////
38     /// \brief Benachrichtige alle Observer.
39     /////////////////////////////////////////////////
40     virtual void notifyObservers();
41
42
43 protected:
44     Subject() = default;
45
46 private:
47     //Liste alle Observer
48     std::list<Observer*> mObservers;
49 };
50
51 #endif // SUBJECT_H_INCLUDED