Введение

Модель проектирования в объектно-ориентированной разработке программного обеспечения

В разработке программного обеспечения, шаблон проектирования "одиночка" (singleton) – это шаблон проектирования, который ограничивает создание экземпляров класса до единственного. Являясь одним из известных шаблонов "Четвёрки авторов" (Gang of Four), описывающих способы решения повторяющихся задач в объектно-ориентированном программировании, этот шаблон полезен, когда в системе требуется ровно один объект для координации действий. В частности, шаблон "одиночка" позволяет объектам:

Гарантировать наличие только одного экземпляра.
Обеспечивать простой доступ к этому экземпляру.
Контролировать процесс создания экземпляров (например, скрывая конструкторы класса).

Термин происходит от математического понятия "одиночка" (singleton).

Общее применение

Одиночные экземпляры часто предпочтительнее глобальных переменных, поскольку они не засоряют глобальное пространство имен (или пространство имен, в котором они содержатся). Кроме того, они обеспечивают отложенное выделение и инициализацию, в то время как глобальные переменные во многих языках всегда потребляют ресурсы. Шаблон Singleton также может служить основой для других шаблонов проектирования, таких как абстрактная фабрика, фабричный метод, строитель и прототип. Объекты-фасады также часто являются одиночными экземплярами, поскольку требуется только один объект-фасад. Ведение журналов – распространенный пример практического применения Singleton, поскольку всем объектам, желающим записывать сообщения в журнал, требуется единая точка доступа и концептуально они пишут в один источник.

Критика

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