Да .. я знаю .. я простак .. Так что же такое синглтон? - PullRequest
28 голосов
/ 07 апреля 2009

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

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

Ответы [ 8 ]

67 голосов
/ 07 апреля 2009

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

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

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

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

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

Вот ссылка, которая может помочь (описывает, как сделать ваш синглтон-поток безопасным в c #):

Реализация шаблона Singleton в C #

13 голосов
/ 17 апреля 2009

Синглтон - это глобальная переменная в овечьей шкуре:)

http://googletesting.blogspot.com/2008/08/root-cause-of-singletons.html

13 голосов
/ 07 апреля 2009

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

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

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

Из статьи, упомянутой ранее:

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

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

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

1 голос
/ 07 апреля 2009

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

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

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

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

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

0 голосов
/ 30 сентября 2009

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

Беседы о чистом коде - «Глобальное государство и одиночные игры»

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

0 голосов
/ 18 апреля 2009

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

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

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

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

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

0 голосов
/ 07 апреля 2009

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

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