Часто в системі можуть існувати сутності тільки в єдиному екземплярі, наприклад, система ведення системного журналу повідомлень або драйвер дисплея. У таких випадках необхідно вміти створювати єдиний екземпляр деякого типу, надавати до нього доступ ззовні і забороняти створення декількох екземплярів того ж типу.
Патерн Singleton надає такі можливості.
Опис патерну Singleton
Архітектура патерну Singleton заснована на ідеї використання глобальної змінної, що має такі важливі властивості:
Така змінна доступна завжди. Час життя глобальної змінної - від запуску програми до її завершення.
Надає глобальний доступ, тобто, така змінна може бути доступна з будь-якої частини програми.
Однак, використовувати глобальну змінну деякого типу безпосередньо неможливо, оскільки існує проблема забезпечення єдиності примірника, а саме, можливе створення декількох змінних того ж самого типу (наприклад, стекових).
Для вирішення цієї проблеми патерн Singleton покладає контроль над створенням єдиного об'єкта на сам клас. Доступ до цього об'єкта здійснюється через статичну функцію-член класу, яка повертає покажчик або посилання на нього. Цей об'єкт буде створений тільки при першому зверненні до методу, а всі наступні виклики просто повертають його адресу. Для забезпечення унікальності об'єкта, конструктори і оператор привласнення оголошуються закритими. UML-діаграма класів патерну Singleton
UML-діаграма класів патерну Singleton
Патерн Singleton часто називають вдосконаленою глобальної змінної.