Когда я должен использовать одноэлементный класс в C ++? - PullRequest
3 голосов
/ 10 июля 2011

С точки зрения начинающего пользователя C ++, единственная причина, по которой я вижу полезность одноэлементного класса, аналогична той, когда я хочу использовать статическую переменную.Ребята, вы знаете, когда лучше всего использовать одноэлементный класс?

Ответы [ 7 ]

9 голосов
/ 10 июля 2011

Единственный раз, когда вы должны использовать синглтон, это тот редкий случай, когда жизненно важно, чтобы когда-либо был только один из этих объектов. Это просто не так часто, как вы думаете.

Довольно часто более чем достаточно просто создать один экземпляр рассматриваемого класса, но не задействовать весь механизм, необходимый для обеспечения уникальности объекта.

Каждый раз, когда я использовал синглтон (или нашел его в кодовой базе, с которой я работаю), я заканчивал тем, что удалял его, потому что мне нужно было изменить поведение, и мешал синглтонному механизму. Я еще не видел случая в нашем коде (обработка платежей), где синглтон действительно имел смысл. У меня было больше, чем несколько случаев, когда у меня был только один экземпляр определенного класса, но ни в одном случае принудительное применение этого через шаблон синглтона не было необходимым или полезным.

4 голосов
/ 10 июля 2011

Когда вам это действительно понадобится, вы узнаете.

Это может никогда не произойти.

Когда вы думаете, что хотите этого, вы, вероятно, ошибаетесь.

4 голосов
/ 10 июля 2011

Я не могу вспомнить ни одного случая, когда уместно использовать одноэлементный класс.

В Java они в основном для организации. Однако в C ++ вместо этого следует использовать пространства имен.

1 голос
/ 10 июля 2011

Я использовал для создания синглетонов с глобальными статическими аксессорами: UserRegistry::getInstance()Сейчас, в эпоху Dependency Injection , я просто использую Registry Помогает и с юнит-тестированием.

0 голосов
/ 10 июля 2011

Я могу придумать несколько причин в области разработки игр, в которых абсолютно необходим класс, реализованный как одиночный:

Физические движки, обработчики спрайтов, обработчики гравитации (если они отдельно от физических движков), анализаторы ввода и т. Д.

0 голосов
/ 10 июля 2011

Вчера в Hacker News была ветка, в которой говорилось, что не стоит использовать синглтон. Было несколько идей о том, когда рекомендуется использовать синглтон (глобальные данные конфигурации, управление сеансами в приложениях веб-сервера), но для каждого обоснования синглетонов есть и хорошие аргументы в пользу того, почему это не очень хорошая идея. http://news.ycombinator.com/item?id=2743894

0 голосов
/ 10 июля 2011

Синглтон-классы - это прославленные глобальные переменные. Используйте только тогда, когда это абсолютно необходимо, т.е. когда у объекта есть только один экземпляр во всей области вашей реализации.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...