Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <cmath>
- #include <string>
- using namespace std;
- class observer;
- class subject
- {
- public:
- subject()
- {
- };
- ~subject()
- {
- };
- void addObserver(observer *);
- void removeObserver(observer *);
- virtual void update() = 0;
- protected:
- vector < observer * >observerList;
- };
- class observer
- {
- public:
- observer()
- {
- };
- ~observer()
- {
- };
- void subscribe(subject *);
- void unsubscribe(subject *);
- virtual void update(vector < int >) = 0;
- };
- void subject::addObserver(observer * o)
- {
- observerList.push_back(o);
- }
- void subject::removeObserver(observer * o)
- {
- for (vector < observer * >::iterator it =
- observerList.begin(); it != observerList.end(); ++it)
- {
- if (*it == o)
- {
- observerList.erase(it);
- break;
- }
- }
- }
- void observer::subscribe(subject * s)
- {
- s->addObserver(this);
- }
- void observer::unsubscribe(subject * s)
- {
- s->removeObserver(this);
- }
- class value:public subject
- {
- public:
- value()
- {
- update();
- }
- void update()
- {
- int t;
- cout << "Enter value: ";
- cin >> t;
- values.push_back(t);
- for (vector < observer * >::iterator it =
- observerList.begin(); it != observerList.end(); ++it)
- {
- observer *o = *it;
- o->update(values);
- }
- }
- private:
- vector < int >values;
- };
- class avg3:public observer
- {
- public:
- avg3(subject * s)
- {
- subscribe(s);
- }
- void update(vector < int >t)
- {
- int sum = 0;
- for (int i = 0; i < 3; i++)
- {
- int buf = t.back();
- sum += buf;
- t.pop_back();
- }
- cout << "The average for the last three is " << float (sum) /
- 3 << endl;
- }
- };
- int main()
- {
- subject *s = new value();
- observer *o;
- for (int j = 2; j <= 10; j++)
- {
- if (j == 3)
- o = new avg3(s);
- s->update();
- }
- delete s;
- delete o;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement