Я очень не согласен с ответом Дайан Хэкборн. Мы постепенно удаляем все синглтоны из нашего проекта в пользу легких объектов с областью задач, которые могут быть легко воссозданы, когда они вам действительно понадобятся.
Синглтоны являются кошмаром для тестирования и, если их лениво инициализировать, привнесут «неопределенность состояния» с тонкими побочными эффектами (которые могут внезапно появиться при перемещении вызовов на getInstance()
из одной области в другую). Видимость упоминается как еще одна проблема, и поскольку синглтоны подразумевают «глобальный» (= случайный) доступ к общему состоянию, могут возникать тонкие ошибки, если они не синхронизированы должным образом в параллельных приложениях.
Я считаю это анти-паттерном, плохим объектно-ориентированным стилем, который по сути сводится к поддержанию глобального состояния.
Чтобы вернуться к вашему вопросу:
Несмотря на то, что контекст приложения можно рассматривать как одиночный, он управляется инфраструктурой и имеет четко определенные жизненный цикл , область действия и путь доступа. Поэтому я считаю, что если вам нужно управлять глобальным состоянием приложения, оно должно идти сюда, больше никуда. Для чего-то еще, переосмыслите, если вам действительно нужен одноэлементный объект, или если можно было бы также переписать ваш одноэлементный класс, чтобы вместо этого создать экземпляры небольших, недолговечных объектов, которые выполняют задачу под рукой.