Призначення паттерна Сінглтон (або Одинак) полягає в забезпеченні доступу до деякого унікального об'єкту з будь-якої точки прикладання. Під унікальністю мається на увазі, що такий об'єкт існує в пам'яті в єдиному екземплярі і інші екземпляри створені бути не можуть.
Без умови унікальності Сінглтон є звичайною глобальної змінної з урахуванням випливають плюсів і мінусів (яких більшість). Тому перед тим, як використовувати цей патерн, переконайтеся, що він дійсно підходить. Об'єкт, який передбачається реалізувати у вигляді Сінглтона повинен бути по-справжньому єдиним на рівні системи.
Приклад реалізація патерну Singleton на C ++
Технічно реалізувати об'єкт-Сінглтон і використовувати його в додатку досить просто (що підкуповує):
При бажанні об'єкт-Сінглтон можна адаптувати до багатопотокової середовищі виконання за допомогою м'ютексів.
Заманливо мати якийсь об'єкт, доступний в будь-якій точці програми. Але це порушує багато принципів створення гарного коду. Тому не поспішайте додавати Сінглтон, які ускладнюють логіку програми і вносять зайві залежності.
Розглянемо приклад. Може здатися гарною ідеєю створити клас для управління настройками додатку у вигляді Сінглтона. Тоді всі компоненти програми зможуть бачити необхідні опції і легко їх використовувати. З одного боку, ідея здається досить непоганий. Конфігурація додатка дійсно може бути представлена унікальною сутністю. А вільний доступ до Сінглтон спростить використання конфігурації.
Однак в цьому випадку з'являється серйозна проблема. Всі компоненти починають залежати від Сінглтона. Якщо знадобиться перенести тільки один з класів в іншій програмі, то доведеться тягти разом з ним і Сінглтон, який може бути призначений для управління параметрами десятків інших класів. Краще витратити трохи більше часу на проектування, але забезпечити чітку передачу параметрів в класи через їх конструктори, а не через непомітний Сінглтон.
До того ж, патерн Сінглтон ускладнює використання поліморфізму і інших принад ООП, які можуть знадобиться, коли вже мінімальним рефакторингом обійтися не вдасться.
Хоча є і цілком нешкідливі застосування Сінглтон. Наприклад, при реалізації іншого патерну: Абстрактна Фабрика.
Також використання Сінглтона виправдано для подання фізично унікальних ресурсів комп'ютера. Наприклад, систему стеження за підключенням / відключенням USB-пристроїв доречно реалізувати у вигляді Сінглтона.