Одинак (англ. Singleton) — шаблон проєктування, що породжує, дозволяє
містити лише один екземпляр об’єкта в додатку, який оброблятиме
всі звернення, забороняючи створювати новий екземпляр. Один із найвідоміших і, мабуть, найсуперечливіших шаблонів.
Застосування:
Для деяких класів важливо, щоб існував лише один екземпляр.
У системі може бути багато принтерів, але можливий лише один спулер.
Повинні бути лише одна файлова система та єдиний віконний менеджер.
У цифровому фільтрі може бути лише один аналого-цифровий перетворювач (АЦП).
Бухгалтерська система обслуговує лише одну компанію.
Одне підключення до БД.
Ми маємо невелику закусочну, в якій є один касовий апарат.
Для звітності до податкової використовується чекова стрічка, на якій зберігатимуться
всі фінансові операції. Для реалізації касового апарату ми використовуємо
шаблон Singleton.
Принцип Singleton простий, як п’ять копійок. Для того, щоб забезпечити існування тільки
одного екземпляра класу Cashbox, ми закрили всі магічні методи для створення екземпляра
класу, клонування та серіалізації. Єдиний можливий спосіб отримати об’єкт – скористатися
статичним методом Cashbox::getInstance().
Примітка:
Незважаючи на зручність застосування даного шаблону, він є одним із найсуперечливіших
при розробці, тож рекомендується його застосовувати, тільки якщо немає жодного іншого рішення, оскільки він створює значні складнощі під час тестування коду.
Є такий антипаттерн, Самотність (Singletonitis),
який саме полягає у недоречному використанні синглтонів.