Guest User

Untitled

a guest
Dec 18th, 2017
112
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.20 KB | None | 0 0
  1. class ISubject;
  2.  
  3. class IObserver
  4. {
  5. protected:
  6. ISubject* m_Subject;
  7.  
  8. public:
  9. IObserver(ISubject* sub) : m_Subject(sub) {}
  10.  
  11. virtual void Update() = 0;
  12. };
  13.  
  14. class ISubject
  15. {
  16. private:
  17. std::vector<IObserver*> m_Observers;
  18.  
  19. public:
  20. ISubject() : m_Observers() {}
  21.  
  22. void RegistarObserver(IObserver* obv) { m_Observers.emplace_back(obv); }
  23. virtual void Notify() { for each(IObserver* obv in m_Observers) { if (obv == nullptr) continue; obv->Update(); } }
  24. };
  25.  
  26. class Clock : public ISubject
  27. {
  28. public:
  29. void Tick() { /*time++*/ Notify(); }
  30.  
  31. int GetSec();
  32. int GetMin();
  33. int GetHr();
  34. };
  35.  
  36. class ClockWatcher : public IObserver
  37. {
  38. public:
  39. virtual void Update() { std::cout << m_Subject.GetSec(); }
  40.  
  41. int GetSec();
  42. int GetMin();
  43. int GetHr();
  44. };
  45.  
  46. class ClockWatcherDecorator abstract : public ClockWatcher
  47. {
  48. protected:
  49. ClockWatcher* m_Clock;
  50.  
  51. public:
  52. ClockWatcherDecorator(ClockWatcher* sub) : m_Clock(sub) {}
  53.  
  54. virtual void Update() = 0;
  55. };
  56.  
  57. class MinuteWatcher : public ClockWatcherDecorator
  58. {
  59. virtual void Update() { std::cout << m_Subject.GetMin(); m_Clock.Update(); }
  60. }
  61.  
  62. class HourWatcher : public ClockWatcherDecorator
  63. {
  64. virtual void Update() { std::cout << m_Subject.GetHr(); m_Clock.Update(); }
  65. }
Add Comment
Please, Sign In to add comment