Патерн singleton - it notes

Призначення паттерна Сінглтон (або Одинак) полягає в забезпеченні доступу до деякого унікального об'єкту з будь-якої точки прикладання. Під унікальністю мається на увазі, що такий об'єкт існує в пам'яті в єдиному екземплярі і інші екземпляри створені бути не можуть.

Без умови унікальності Сінглтон є звичайною глобальної змінної з урахуванням випливають плюсів і мінусів (яких більшість). Тому перед тим, як використовувати цей патерн, переконайтеся, що він дійсно підходить. Об'єкт, який передбачається реалізувати у вигляді Сінглтона повинен бути по-справжньому єдиним на рівні системи.

Приклад реалізація патерну Singleton на C ++

Технічно реалізувати об'єкт-Сінглтон і використовувати його в додатку досить просто (що підкуповує):

При бажанні об'єкт-Сінглтон можна адаптувати до багатопотокової середовищі виконання за допомогою м'ютексів.

Заманливо мати якийсь об'єкт, доступний в будь-якій точці програми. Але це порушує багато принципів створення гарного коду. Тому не поспішайте додавати Сінглтон, які ускладнюють логіку програми і вносять зайві залежності.

Розглянемо приклад. Може здатися гарною ідеєю створити клас для управління настройками додатку у вигляді Сінглтона. Тоді всі компоненти програми зможуть бачити необхідні опції і легко їх використовувати. З одного боку, ідея здається досить непоганий. Конфігурація додатка дійсно може бути представлена ​​унікальною сутністю. А вільний доступ до Сінглтон спростить використання конфігурації.

Однак в цьому випадку з'являється серйозна проблема. Всі компоненти починають залежати від Сінглтона. Якщо знадобиться перенести тільки один з класів в іншій програмі, то доведеться тягти разом з ним і Сінглтон, який може бути призначений для управління параметрами десятків інших класів. Краще витратити трохи більше часу на проектування, але забезпечити чітку передачу параметрів в класи через їх конструктори, а не через непомітний Сінглтон.

До того ж, патерн Сінглтон ускладнює використання поліморфізму і інших принад ООП, які можуть знадобиться, коли вже мінімальним рефакторингом обійтися не вдасться.

Хоча є і цілком нешкідливі застосування Сінглтон. Наприклад, при реалізації іншого патерну: Абстрактна Фабрика.

Також використання Сінглтона виправдано для подання фізично унікальних ресурсів комп'ютера. Наприклад, систему стеження за підключенням / відключенням USB-пристроїв доречно реалізувати у вигляді Сінглтона.


Патерн Стан на C ++


Патерн Декоратор і створення фільтрів зображень в Qt


Патерн Відвідувач на C ++


Патерн Абстрактна фабрика на C ++


Патерн Компоновщик на C ++


Приклад поліморфізму в C ++ на основі ООП


Патерн Null Object


Патерн Будівельник і XML