несколько экземпляров singleton-класса

У меня есть некоторый класс, это - одиночный элемент, у нас есть этот класс уже в нескольких приложениях, и это используется там в качестве одиночного элемента.

Теперь я пишу некоторое новое приложение, и мне нужны несколько экземпляров того класса, что лучшая практика должна иметь несколько экземпляров его?

Путем получения из него и создания частного constructur для общественности я работаю с c#?

Или здесь может быть someother идея?

Спасибо

6
задан BoltClock 10 August 2010 в 19:09
поделиться

7 ответов

Предполагается, что будет только один синглтон. Если у вас их несколько, это не синглтон.

Может быть, Multiton - это то, что вам нужно?

12
ответ дан 8 December 2019 в 02:40
поделиться

Просто: не делайте его синглтоном. Слово 'single' здесь неспроста.

13
ответ дан 8 December 2019 в 02:40
поделиться

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

4
ответ дан 8 December 2019 в 02:40
поделиться

Синглтон - это шаблон проектирования, который предоставляет вам две гарантии:

  • , что будет существовать ровно один экземпляр класса, и
  • , что этот экземпляр доступен глобально.

Если вы удалите первое требование, то, что у вас есть, больше не будет синглтоном. Это простой старомодный глобальный .

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

Кроме того, Синглтоны - действительно плохая идея . Не используйте их в первую очередь.

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

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

3
ответ дан 8 December 2019 в 02:40
поделиться

Это действительно зависит от того, как именно класс реализован как синглтон.

Если у класса есть частный конструктор по умолчанию, а экземпляр синглтона создается с помощью статического фабричного метода, ваш единственный вариант - унаследовать от класса (пока он не запечатан) и предоставить открытый конструктор производного класса для создать несколько экземпляров.

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

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

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

То, о чем вы просите, очень противоречиво - не могли бы вы определить, что вы имеете в виду под синглтоном, чтобы убедиться, что мы не используем другой словарь?

Если существующий объект является истинным static singleton, то вы, вероятно, не сможете создать несколько экземпляров; для этого вам нужно будет загрузить каждый экземпляр (и его вызывающих) в их собственный AppDomain , что нетривиально и было бы ужасно большим компромиссом / взломом только для получения нескольких синглтонов.

0
ответ дан 8 December 2019 в 02:40
поделиться
Другие вопросы по тегам:

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