Ouais.. Je sais.. Je suis un niais.. Alors, quel est un Singleton?

8 ответов

Comme demandé, voici quelques analogies:

  • La Terre
  • L'Univers
  • l'élément oxygène (il y a d'autres éléments, mais un seul oxygène. Il y a beaucoup de molécules d'oxygène, mais seulement un élément canonique d'oxygène.)
  • le concept de vrai
  • le concept de faux

, Vous pouvez instancier beaucoup de Vrais objets, mais ils se référeront tous au même élément réel (c.-à-d. le concept universel de vrai). Selon le domaine de votre application, il peut y avoir des exemples plus spécifiques:

  • La connexion de base de données
  • le fil principal de l'application
  • Tout ce qui représente un périphérique matériel (c'est-à-dire que vous ne voulez instancier qu'un objet représentant CPU0).
67
répondu runako 2009-04-07 21:15:03
la source

d'Un singleton est une classe de laquelle il ne peut y avoir qu'une seule instance de votre application. Vous partagez alors cette instance tout au long de votre application.

voici un lien qui pourrait aider (couvre comment rendre votre thread singleton sûr en c# ainsi):

mise en Œuvre du Pattern Singleton en C#

18
répondu Justin Niessner 2009-04-07 21:07:13
la source

d'Un singleton est une variable globale dans l'habillement du mouton :)

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

13
répondu Ates Goral 2009-04-17 21:30:27
la source

Singleton est utile quand vous doit être sûr qu'il y a un et seulement une instance d'une classe, et que cet objet doit être accédé à partir de plusieurs endroits dans le code.

S'il pouvait être logique que plus d'une instance de votre classe puisse être utilisée à la fois, alors vous ne voulez pas un singleton.

Voici quelques informations sur l'utilisation des singletons: http://www.ibm.com/developerworks/webservices/library/co-single.html

tiré de l'article mentionné précédemment:

Pour décider si une classe est vraiment un singleton, vous devez vous poser quelques question.

  • chaque demande d'utilisation de cette classe exactement de la même manière? (c'est exactement le mot-clé)
  • chaque demande jamais besoin un seul exemple de cette classe?

    (jamais et un sont les mots clés)
  • si les clients de cette classe ne sont pas au courant de l'application, ils sont

    une partie de?

    si vous répondez oui aux trois questions, alors vous avez trouvé un Singleton. Les points clés sont ici qu'une classe n'est qu'un singleton si toutes les applications le traitent exactement même et si ses clients peuvent utiliser le classe sans contexte d'application.

13
répondu Martin 2009-04-27 18:53:01
la source

Un singleton est une classe, qui ne peut avoir qu'une seule instance créée.

Ceci est souvent mis en œuvre en ayant un constructeur privé, qui est assigné à une variable statique, puis accessible par une méthode publique.

il y a quelques problèmes avec l'utilisation des singletons, y compris:

  • ils rendent les tests difficiles
  • Ils ne peuvent pas être sous-classée
  • une fois instancié, l'instance live forever", 151980920"

voir ici pour une description plus détaillée de singleton, et un autre modèle "Monostate" qui pourrait être utile à la place: http://www.objectmentor.com/resources/articles/SingletonAndMonostate.pdf

1
répondu kenj0418 2009-04-27 18:52:20
la source

outre sa place en tant que modèle particulier de conception, Singleton peut également être considéré comme simplement une chose . Son utilisation dans la programmation découle sans doute de son utilisation en mathématiques, où un singleton est un ensemble d'un seul nombre.

0
répondu Peter 2009-04-07 21:10:02
la source

Singleton peut parfois ne pas être si célibataire. Jetez un oeil ici: quand un singleton n'est pas un Singleton? , article fourni par Sun.

une recommandation: ne l'utilisez pas. C'est juste pas bon, peut créer de sérieux goulots d'étranglement de performance dans votre application, et l'effort pour tester les classes singleton n'en vaut pas la peine.

de L'article Wikipédia mentionné ci-dessus:

il devrait être a noté que ce modèle rend les unités de test beaucoup plus difficile, car il introduit L'état Global dans une application.

une Autre ressource utile de regarder est ce post sur le google blog de tests.

0
répondu Macaubas 2009-04-18 02:45:03
la source

il y a eu un excellent discours sur Google Tech où le conférencier s'est adressé à l'État mondial (y compris les Singletons) et pourquoi ils rendent les tests presque impossibles:

Le Propre Code Parle - "l'État Global et les Singletons"

l'orateur fait une distinction entre ce que il appelle des Singletons (capital 'S'), où des mesures sont prises pour empêcher la classe d'être instanciée plus d'une fois (i.e., souvent avec une méthode statique getInstance et des constructeurs privés), et singletons (petit 's') où une seule instance est tout ce qui est nécessaire, mais rien n'est construit dans la classe pour empêcher la création de plusieurs instances.

0
répondu bambams 2009-09-30 00:20:16
la source

Autres questions sur singleton design-patterns