Последствия одиночек

#iphone #singleton #application-singleton

#iPhone #синглтон #приложение-singleton

Вопрос:

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

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

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

Ответ №1:

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

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

Одиночки — это просто другой способ сказать «глобальный». Это неплохо, но, как правило, это не очень хорошая идея для систем, которые развиваются и усложняются.

Комментарии:

1. Хм, я понимаю вашу точку зрения. Заставил меня ответить и на мой собственный вопрос, спасибо за комментарий!

Ответ №2:

Из книги GOF:

Одноэлементный шаблон имеет несколько преимуществ:

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

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

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

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

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