Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class ISubject;
- class IObserver
- {
- protected:
- ISubject* m_Subject;
- public:
- IObserver(ISubject* sub) : m_Subject(sub) {}
- virtual void Update() = 0;
- };
- class ISubject
- {
- private:
- std::vector<IObserver*> m_Observers;
- public:
- ISubject() : m_Observers() {}
- void RegistarObserver(IObserver* obv) { m_Observers.emplace_back(obv); }
- virtual void Notify() { for each(IObserver* obv in m_Observers) { if (obv == nullptr) continue; obv->Update(); } }
- };
- class Clock : public ISubject
- {
- public:
- void Tick() { /*time++*/ Notify(); }
- int GetSec();
- int GetMin();
- int GetHr();
- };
- class ClockWatcher : public IObserver
- {
- public:
- virtual void Update() { std::cout << m_Subject.GetSec(); }
- int GetSec();
- int GetMin();
- int GetHr();
- };
- class ClockWatcherDecorator abstract : public ClockWatcher
- {
- protected:
- ClockWatcher* m_Clock;
- public:
- ClockWatcherDecorator(ClockWatcher* sub) : m_Clock(sub) {}
- virtual void Update() = 0;
- };
- class MinuteWatcher : public ClockWatcherDecorator
- {
- virtual void Update() { std::cout << m_Subject.GetMin(); m_Clock.Update(); }
- }
- class HourWatcher : public ClockWatcherDecorator
- {
- virtual void Update() { std::cout << m_Subject.GetHr(); m_Clock.Update(); }
- }
Add Comment
Please, Sign In to add comment