несколько экземпляров синглтон-класса - PullRequest
6 голосов
/ 10 августа 2010

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

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

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

Или тут может быть какая-то другая идея?

Спасибо

Ответы [ 7 ]

13 голосов
/ 10 августа 2010

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

12 голосов
/ 10 августа 2010

Должен быть только один синглтон.Если у вас их больше одного, это не синглтон.

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

4 голосов
/ 10 августа 2010

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

3 голосов
/ 10 августа 2010

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

1 голос
/ 10 августа 2010

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

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

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

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

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

1 голос
/ 10 августа 2010

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

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

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

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

0 голосов
/ 10 августа 2010

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

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

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