Несколько экземпляров одноэлементного класса

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

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

Исходя из этого и делая публичный конструктор публичным, я работаю с С#?

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

Спасибо

7 ответов

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

Может быть, Multiton - это то, что вы хотите?


Простой: не делайте его синглом. Слово "сингл" существует по какой-то причине.


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


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


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

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

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

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


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

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

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

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

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


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

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

licensed under cc by-sa 3.0 with attribution.