Последствия синглетонов - PullRequest
2 голосов
/ 12 мая 2011

Так что я просто углубился в классы Синглтона, и да, я нахожу их весьма полезными. Я использую свои синглтоны в основном для хранения данных для нескольких целей (просмотров, таблиц и т. Д.). При этом я уже вижу, как я собираюсь внедрить много синглетонов в свой проект.

Но может ли много синглетов оказывать негативное влияние? Из того, что я читал о синглетонах, вы знаете, что вы создаете один экземпляр для каждого из них в процессе. Другие экземпляры классов освобождаются (при условии, что они освобождаются должным образом) из памяти, тогда должны ли синглеты также выпускаться?

Итак, чтобы ограничиться одним вопросом: вредно ли иметь много синглетонов?

Ответы [ 2 ]

1 голос
/ 07 февраля 2013

Из GOF Book:

У шаблона Singleton есть несколько преимуществ:

  1. Контролируемый доступ к единственному экземпляру.Поскольку класс Singleton инкапсулирует свой единственный экземпляр, он может строго контролировать, как и когда клиенты обращаются к нему.

  2. Сокращение пространства имен.Шаблон Singleton - это улучшение по сравнению с глобальными переменными.Это позволяет избежать загрязнения пространства имен глобальными переменными, в которых хранятся отдельные экземпляры.

  3. Разрешает уточнение операций и представление.Класс Singleton может быть разделен на подклассы, и приложение легко настроить с помощью экземпляра этого расширенного класса.Вы можете настроить приложение с экземпляром класса, который вам нужен во время выполнения.

  4. Разрешает переменное число экземпляров.Шаблон позволяет легко передумать и разрешить более одного экземпляра класса Singleton.Более того, вы можете использовать тот же подход, чтобы контролировать количество экземпляров, которые использует приложение.Необходимо изменить только операцию, которая предоставляет доступ к экземпляру Singleton.

  5. Более гибкая, чем операции класса.Другой способ упаковать функциональность синглтона - это использовать класс Singleton.операции над классами (то есть статические функции-члены в C ++ или методы класса в Smalltalk).Но обе эти языковые технологии затрудняют изменение дизайна, чтобы разрешить более одного экземпляра класса.Более того, статические функции-члены в C ++ никогда не являются виртуальными, поэтому подклассы не могут переопределять их полиморфно.

1 голос
/ 12 мая 2011

Синглтоны не масштабируются. Неважно, что вы думаете, что должно быть одноэлементным, когда ваша система становится больше, оказывается, вам нужно более одного.

Если вам НИКОГДА не нужно больше одного, то синглтон - это хорошо. Однако при масштабировании системы обычно требуется более одного из что-либо в своем собственном контексте.

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

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