Подтвердить что ты не робот

Да.. Я знаю.. Я простой... Так что же Синглтон?

Я несколько раз пробовал понять, что такое Синглтон. Возможно, я просто слишком нагляден, так что кто-нибудь может прорваться в простой аналогии.

Похожие сообщения:

4b9b3361

Ответ 1

В соответствии с запросом, вот несколько аналогий:

  • Земля
  • Вселенная
  • Элемент кислорода (есть другие элементы, но только один кислород). Много молекул кислорода, но только один канонический кислородный элемент.)
  • Концепция True
  • Концепция False

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

  • Соединение с базой данных
  • Основной поток приложения
  • Все, что представляет собой аппаратное устройство (т.е. вы хотите только создать экземпляр одного объекта, представляющего CPU0).

Ответ 2

Синтаксис - это класс, в котором может быть только один экземпляр вашего приложения. Затем вы передаете этот экземпляр всем своим приложениям.

Здесь ссылка, которая может помочь (описывает, как сделать ваш однопоточный поток безопасным в С#):

Внедрение шаблона Singleton в С#

Ответ 3

Синглтон полезен, если вы должны быть уверены, что есть экземпляр один и только один, и этот объект должен быть доступ из нескольких мест в коде.

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

Вот некоторая информация о том, где использовать синглтоны: http://www.ibm.com/developerworks/webservices/library/co-single.html

Из предыдущей статьи:

Чтобы решить, действительно ли класс singleton, вы должны спросить себя вопросы.

  • Будет ли каждое приложение использовать этот класс точно так же? (именно это ключевое слово)
  • Будет ли в каждом приложении понадобиться только один экземпляр этого класса?
    (всегда и один - ключевые слова).
  • Если клиенты этого класса не знают о приложении, которое они используют, часть?

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

Ответ 6

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

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

Есть некоторые проблемы с использованием синглтонов, в том числе:

  • Они затрудняют тестирование
  • Они не могут быть подклассифицированы
  • После создания экземпляра экземпляр будет жить вечно

См. здесь для дальнейшего описания singleton и другого шаблона "Monostate", который может быть полезен вместо этого: http://www.objectmentor.com/resources/articles/SingletonAndMonostate.pdf

Ответ 7

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

Ответ 8

Синглтон иногда может быть не таким одиноким. Посмотрите здесь: Когда синглтон не является Singleton?, статья предоставлена ​​Sun.

Одна рекомендация: Не используйте ее. Это просто не хорошо, может создать серьезные узкие места производительности в вашем приложении, а усилия по тестированию одноэлементных классов просто не стоят.

Из вышеупомянутой статьи в Википедии:

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

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

Ответ 9

Был отличный Google Tech Talk, где докладчик обратился к глобальному состоянию (включая Singletons) и почему они делают тестирование практически невозможным:

Чистые коды кодов - "Глобальное состояние и одиночные игры"

Докладчик делает различие между тем, что он называет Singletons (capital 'S'), где предпринимаются шаги, чтобы предотвратить создание экземпляра более одного раза (т.е. часто со статическим методом getInstance и частными конструкторами) и singleletons (small 's'), где один экземпляр - это все, что когда-либо необходимо, но ничего не встроено в класс, чтобы предотвратить создание нескольких экземпляров.