Одиночка - это порождающий паттерн проектирования, который гарантирует, что у класса есть только один экземпляр и представляет к нему глобальную точку доступа. Все реализации одиночки сводятся к тому, чтобы скрыть конструктор по умолчанию и создать публичный статический метод, который и будет контролировать жизненный цикл объекта-одиночки. Если у вас есть доступ к классу одиночки, значит будет доступ и к этому статическому методу. Из какой точки кода вы бы его не вызвали, он всегда будет отдавать один и тот же объект. Применимость Когда в программе должен быть единственный экземпляр какого-то класса, доступный всем клиентам (например, общий доступ к базе данных из разных частей программы). Одиночка скрывает от клиентов все способы создания нового объекта, кроме специального метода. Этот метод либо создает объект, либо отдает существующий объект, если он уже был создан. Когда вам хочется иметь больше контроля над глобальными переменными. В отличие от глобальных переменных, Одиночка гара