ObserverPattern

Реалізуйте консольний застосунок, використовуючи патерн Спостерігач, який:

  • Друкує “hello world” (або будь-який інший текст) в консолі.
  • і спостерігає за рухом миші: Коли курсор заходить в область консольного вікна, колір тексту в консолі змінюється, а поточний час записується в лог файл з тегом «Enter». Коли курсор полишає область консольного вікна, колір тексту в консолі змінюється на оригінальний і поточний час записується у лог з тегом “Leave”. Ви можете захардкодити шлях до лог файлу або розмістити його в той же директорії що й exe файл.

Всі завдання мають задовольняти таким вимогам:

  1. Використовуйте розумні вказівники для управління пам’яттю. Можете використовувати самописні гварди (guards) або рішення з stl/boost для інших видів ресурсів.
  2. Використовуйте контейнери з stl: vector, map, list і т.д., за потреби.
  3. Використовуйте винятки (exceptions) для обробки помилок. Забезпечте посилену (strong) гарантію безпеки і не забудьте про best practices.
  4. Продумайте архітектуру застосунку: інтерфейси, відповідальність класів (не забудьте про принцип єдиної відповідальності). Оскільки ми обговорювали ООП і патерни проектування, архітектура є важливою частиною домашньої роботи. Ви маєте показати наскільки Ви засвоїли як працюють патерни і ООП.
  5. Розподіліть класи по файлах. Це також важлива частина декомпозиції. Можна розмістити декілька класів в один файл, якщо це відповідає логіці застосунку, але не мішайте усе в main.cpp.