Одиночка (англ. Singleton) — порождающий шаблон проектирования, позволяет
содержать только один экземпляр объекта в приложении, которое будет обрабатывать
все обращения, запрещая создавать новый экземпляр. Один из самых известных и, пожалуй, самых спорных шаблонов.
Применение:
Для некоторых классов важно, чтобы существовал только один экземпляр.
В системе может быть много принтеров, но возможен лишь один спулер.
Должны быть только одна файловая система и единственный оконный менеджер.
В цифровом фильтре может находиться только один аналого-цифровой преобразователь (АЦП).
Бухгалтерская система обслуживает только одну компанию
Одно подключение к БД.
У нас есть небольшая закусочная, в которой есть один кассовый аппарат.
Для отчётности в налоговую используется чековая лента, на которой будут сохраняться
все денежные операции. Для реализации кассового аппарата мы используем
шаблон Singleton.
Принцип Singleton прост, как пять копеек. Для того, чтобы обеспечить существование только
одного экземпляра класса Cashbox, мы закрыли все магические методы для создания экземпляра
класса, клонирования и сериализации. Единственный возможный способ получить объект – воспользоваться
статическим методом Cashbox::getInstance().
Примечание:
Несмотря на удобство применения данного шаблона, он является одним из самых спорных
при разработке и рекомендуется его применять только если нет никакого другого способа
решения, потому как это создает значительные сложности при тестировании кода.
Есть такой антипаттерн, Одиночество (Singletonitis),
который как раз заключается в неуместном использовании синглтонов.