Возможный дубликат:
Я начинающий программист (4 месяца на моей первой работе) и недавно заинтересовался паттернами проектирования. Один из них, который я недавно использовал, это Singleton. Однако, глядя на некоторые комментарии к этой теме. У него есть несколько плохих отзывов; может ли кто-нибудь объяснить, почему?
Я нашел его полезным в некоторых местах, однако, вероятно, я мог бы добиться того же самого без него, используя статический класс.
Это дает вам глобальный доступ к изменяемому состоянию.
Все, что использует Singleton, теперь тесно связано с ним.
Старайтесь избегать тесной связи. Это затрудняет обновление кода. Трудно проверить.
Если ваш выбор — синглтон или глобальная переменная. Чем, по крайней мере, Singleton обеспечивает ленивую инициализацию.
Но обычно лучше избегать глобально доступного изменяемого состояния и передавать все зависимости в ваш код через параметры или в конструкторе. Это отделяет ваш код от конкретных экземпляров.
Примечание. Глобальный доступ к постоянному состоянию не имеет большого значения.
Вот хороший доклад на эту тему, сделанный инженерами Google:
https://thewikihow.com/video_-FRm3VPhseI
Паттерн Singleton looks
кажется одним из самых простых в реализации (когда вы впервые видите шаблоны проектирования). Это относительно легко сделать, но в его реализации есть несколько ошибок (все они зависят от языка). Но самое сложное в изучении Синглтона — это; научиться, когда их использовать (что должно быть редко (большинство людей утверждают, что никогда, но мне трудно убедить себя, что я никогда не смог бы использовать синглтон (думал, что те несколько раз, которые я использовал, в большинстве случаев были ошибки (но это как мы учимся))).