Пример Шаблона "одиночка"

Кто-либо может сказать мне хороший пример Шаблона "одиночка"? Также у меня есть одно сомнение для выяснения, следующий сценарий, тот из шаблона "одиночка":

Когда у нас есть много принтеров, подключенных в LAN, но только одна очередь печати?

14
задан Supereme 6 April 2010 в 13:15
поделиться

7 ответов

Синглтон - это программный шаблон.

Здесь - пример на C #.

Наличие единой очереди в локальной сети - это скорее проблема проектирования оборудования / сети, чем концепция программного обеспечения, поэтому на самом деле не применима. Если бы вы моделировали такую ​​вещь в программном обеспечении и имели бы , чтобы быть уверенным, что есть только одна очередь, тогда это было бы применимо.

8
ответ дан 1 December 2019 в 09:01
поделиться

Ответ HTTP может быть хорошим примером. Вы не хотите, чтобы два или более экземпляра отправляли противоречащие заголовки.

2
ответ дан 1 December 2019 в 09:01
поделиться

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

  1. Сборка таких объектов затруднена.
  2. Трудно проверить

Я не думаю, что очередь печати - это одноэлементный шаблон.

1
ответ дан 1 December 2019 в 09:01
поделиться

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

По крайней мере, мне так сказали.

4
ответ дан 1 December 2019 в 09:01
поделиться

Один из лучших примеров (в реальной жизни) шаблона Singleton, который я видел, - это пул соединений SQL в .NET.

Если вы хотите увидеть код, вам придется открыть Reflector ... но Singleton отслеживает все доступные соединения и выдает их по мере их доступности.

Что касается вашего примера, он немного расплывчатый. Очередь документов на каждом отдельном принтере может быть лучшим примером. По мере поступления документов на принтер они ставятся в очередь. Затем каждый процесс, запущенный на принтере, берет документ из очереди Singleton (вместо того, чтобы создавать свою собственную очередь для своего потока).

1
ответ дан 1 December 2019 в 09:01
поделиться

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

Я все время использую конфигурацию программы .

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

4
ответ дан 1 December 2019 в 09:01
поделиться

Мое личное правило использования синглтонов - использовать его только тогда, когда возникает ошибка , когда существует более одного экземпляра, и требуется глобальный доступ . Я бы сказал, что очередь печати поэтому не хороший кандидат для синглтона: потому что вам не нужен глобальный доступ, и также можно утверждать, что наличие более одного объекта является ошибкой. Фактически, хотя может существовать одна «физическая» очередь печати (например, где-то на сервере печати), это не то, о чем приложение заботится, ему просто нужно отправлять «задания»:

PrintJobScheduler pjs;
pjs.SubmitPrintJob(myPrintJob);

Вам не нужны мои воображаемые PrintJobScheduler должен быть одноэлементным, даже если он может взаимодействовать с «одноэлементной» службой где-то в сети.

6
ответ дан 1 December 2019 в 09:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: