-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathObserver.cpp
78 lines (61 loc) · 1.62 KB
/
Observer.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#include <iostream>
#include <list>
#include <algorithm>
class Observer {
public:
virtual void update(std::string obstate){};
};
class ConcObserver : public Observer {
public:
std::string observerState;
void update(std::string obstate) override {
this->observerState = obstate;
std::cout << "State Updated: " << this->observerState << std::endl;
}
};
class Subject {
public:
std::list<Observer *> observerlist;
virtual void Attach(Observer *ob) {};
virtual void Detach(Observer *ob) {};
virtual void Notify(){};
};
class ConcSubject : public Subject {
public:
std::string SubjectState;
ConcSubject(std::string s) {
this->SubjectState = s;
}
void Attach(Observer *ob) override {
this->observerlist.push_front(ob);
std::cout << "observer added" << std::endl;
}
void Detach(Observer *ob) override {
this->observerlist.remove(ob);
std::cout << "observer removed" << std::endl;
}
void Notify() override {
for (auto observer: this->observerlist) {
observer->update(this->SubjectState);
}
}
std::string GetState() {
return this->SubjectState;
}
void SetState(std::string s) {
this->SubjectState = s;
}
};
//int main() {
// Subject* c1 = new ConcSubject("First Subject");
// Subject* c2 = new ConcSubject("Second Subject");
// Observer* ob1 = new ConcObserver();
// Observer* ob2 = new ConcObserver();
// c1->Attach(ob1);
// c2->Attach(ob2);
// c1->Notify();
// c2->Notify();
// c1->Detach(ob1);
// c2->Detach(ob2);
// return 0;
//}