Где именно шаблон Singleton используется в реальном приложении? - PullRequest
42 голосов
/ 07 июля 2010

Мне было просто любопытно, где именно используется шаблон синглтона ... Я знаю, как работает шаблон и где его можно использовать, но лично я никогда не использовал его в реальных приложениях. Кто-нибудь может привести пример, где его можно использовать .. Я был бы очень признателен, если бы кто-нибудь мог объяснить, как и где они использовались в реальном приложении. Спасибо, Свати

Ответы [ 12 ]

57 голосов
/ 07 июля 2010

Обычно синглтоны используются для глобальной конфигурации.Простейшим примером будет LogManager - есть статический метод LogManager.getLogManager(), и используется один глобальный экземпляр.

На самом деле это не «настоящий» синглтон, как выВы можете получить свой собственный класс из LogManager и таким образом создавать дополнительные экземпляры - но обычно используется в качестве одиночного.

Другим примером будет java.lang.Runtime -из документов:

Каждое Java-приложение имеет один экземпляр класса Runtime, который позволяет приложению взаимодействовать со средой, в которой оно выполняется.Текущее время выполнения может быть получено из метода getRuntime.

Это в значительной степени определение синглтона:)

Теперь шаблон синглтона в основном нахмурилсяв наши дни - она ​​вводит тесную связь и усложняет тестирование с использованием синглтона, поскольку вы не можете легко смоделировать этот компонент.Если вы можете обойтись без него, тем лучше.Вместо этого введите свои зависимости, где это возможно.

12 голосов
/ 07 июля 2010

Я использовал шаблон синглтона в онлайн-магазине Футбольной команды.мы применили шаблон синглтона к классу ShoppingCart.

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

11 голосов
/ 07 июля 2010

Некоторые примеры:

  • Аппаратный доступ
  • Соединения с базой данных
  • Конфиг-файлы
3 голосов
/ 18 октября 2017

Рассмотрим ситуацию AudioDriverService , которая разработана в Singleton Pattern.Таким образом, мы можем создать только один экземпляр класса AudioDriverService .Теперь фактически ваш Windows Media Player или Youtube Player совместно используют один и тот же объект AudioDriverService вместо создания нового экземпляра.

2 голосов
/ 29 сентября 2017

Когда вы используете Logger, вы используете шаблон Singleton для класса Logger. В случае, если это не Singleton, у каждого клиента будет свой собственный объект Logger, и будет иметься параллельный доступ к экземпляру Logger в многопоточной среде, и несколько клиентов будут одновременно создавать / записывать в файл Log, что приводит к повреждению данных.

2 голосов
/ 07 июля 2010

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

2 голосов
/ 07 июля 2010

Синглтон - хороший дизайн шаблона.Прежде чем выбрать шаблон, сначала проведите углубленный анализ вашей проблемы и ее решения.Если в вашем решении у какого-либо объекта есть только один экземпляр, и вы хотите смоделировать его в своем проекте, вам следует использовать шаблон синглтона.Например, если вы моделируете ПК в программном обеспечении, может быть только один экземпляр ПК относительно вашей работающей программы.Как сказал Джон Скит, java.lang.Runtime смоделирован как одноэлементный, потому что для всех java-объектов, которые загружаются и работают в среде java, существует только один экземпляр среды выполнения.

Снова много раз это используется по неправильным причинам.Никогда не создавайте синглтон, чтобы вы могли легко получить доступ к объекту (например, Object :: instance ()) из любого места, не передавая объект вокруг.Это худшее применение, с которым я когда-либо сталкивался.

1 голос
/ 28 июня 2017

Шаблон Singleton обычно полезен, когда объект, который создается один раз и используется совместно через разные темы / Приложения. Рассмотрим случай, когда вы реализуете класс загрузки свойств для принтера.

Теперь принтеры могут иметь различные свойства. Например: Моно принтер, Цветной принтер, Автоматическая поддержка сканера Принтер и т. Д. ...

Каждый раз при загрузке этот конфигурационный файл должен загружаться, чтобы включить несколько кнопок / приложений. на вкладке пользовательского интерфейса сказать или любой пользовательский интерфейс принтера.

Значение поддерживаемых функций хранится в форме таблицы конфигурации, например, 1, если функция поддерживается и 0, если не поддерживается.

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

Значения файла будут изменены / будут считываться только в следующих случаях: - 1. На загрузке. 2. При добавлении или удалении любого нового аппаратного периферийного устройства.

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

Это один пример, который я могу вспомнить, где мы можем реализовать шаблон проектирования Singleton.

1 голос
/ 22 ноября 2016

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

0 голосов
/ 25 сентября 2018

Singleton Class в основном используется, когда вам нужно разрешить только один экземпляр класса. Если взять пример из реальной жизни, то при проектировании ООП библиотеки мы можем создать класс библиотеки как одноэлементный класс.

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