2008-09-17 6 views
-4

Ne perdez pas votre temps avec cette question. Suivre jusqu'à: What is so bad about singletons?Quel est le problème avec singleton?


S'il vous plaît ne hésitez pas à pétasse sur Singleton.

Une utilisation inappropriée de Singleton peut causer beaucoup de peinture. Quel genre de problème avez-vous vécu avec Singleton? Quelle est la mauvaise utilisation commune de ce modèle? Après quelques recherches sur la réponse de Corey, j'ai découvert quelques articles sur ce sujet.

+0

Que diriez-vous de répondre à votre propre question et de publier quelques petites choses que vous n'aimez pas? Ceci est acceptable dans SO, et peut déclencher une discussion productive. –

+0

duplicata possible de [Qu'est-ce qui est si mauvais sur Singletons?] (Http://stackoverflow.com/questions/137975/what-is-so-bad-about-singletons) –

Répondre

2

Il n'y a rien d'intrinsèquement mauvais avec le motif Singleton. C'est un outil et parfois il devrait être utilisé.

+3

Le motif Singleton est mauvais et doit être détruit. Il n'y a jamais de bonne raison de l'utiliser. En d'autres termes, le modèle de Singleton est fondamentalement juste une façon élégante d'habiller une variable globale. Les globals sont-ils bons ou mauvais? –

+0

Dépend de l'utilisation, pour un service de suivre des instances d'objets à travers tous les threads et autres instances d'objets ... bien les variables globales sont très pratiques pour cela. Sinon, nous n'aurions jamais eu ces grands objets statiques. –

0

Je pense une question plus appropriée pourrait être: Dans quelles situations est l'utilisation d'un singleton inapproprié? Ou qu'avez-vous vu qui utilise un Singleton qui ne devrait pas.

-1

La plupart des modèles de singleton que je vois écrits ne sont pas écrits de manière sûre. Si écrit correctement, ils peuvent être utiles.

0

Fondamentalement singleton est un moyen d'avoir des données statiques et prétendre qu'il n'est pas vraiment statique.

Bien sûr, je l'utilise, mais essayez de ne pas en abuser.

0

Un problème fondamental avec la conception originale du GoF est le fait que le destructeur n'est pas protégé. Toute personne ayant une référence à l'instance singleton est libre de détruire le singleton.

Voir la mise à jour de John Vlissides "To Kill A Singleton" dans son livre "Pattern Hatching" (Amazon link).

acclamations,

Rob

3

Parfois, il peut rendre votre code plus étroitement couplé avec la classe singleton étant refrerenced directement par le nom de différentes parties de votre base de code. Ainsi, par exemple, lorsque vous devez tester une partie de votre code et qu'il référence un singleton à partir d'une partie différente du code, vous ne pouvez pas facilement truquer cette dépendance avec un objet fantaisie.

0

Il n'y a rien de mal avec un singleton en soi, et en tant que motif, il remplit un rôle essentiel en reconnaissant le besoin de créer certains objets en une seule fois. Ce à quoi il est fréquemment utilisé est un euphémisme pour les variables globales comme tentative de contourner la stigmatisation des variables globales, et c'est cette utilisation qui est intrinsèquement erronée.Si une variable globale s'avère être la bonne solution, l'utilisation d'un singleton ne l'améliorera pas. Si l'utilisation d'une variable globale est incorrecte (ce qui est assez courant), l'inclure dans un singleton ne la rendra pas plus correcte.

1

Je n'ai pas été exposé au Singleton autant que d'autres affiches, mais presque toutes les implémentations que j'ai vues (en C#) auraient pu être réalisées avec des classes/méthodes statiques. Je suppose que vous pourriez soutenir qu'une classe statique est une implémentation du pattern singleton, mais ce n'est pas ce que j'ai vu. J'ai vu des gens construire et gérer ces classes/objets Singleton quand tout ce dont ils avaient vraiment besoin était d'utiliser le mot-clé static. Donc, je ne dirais pas que le motif Singleton est mauvais. Je dirais que c'est un peu comme des fusils. Je ne pense pas que les armes soient mauvaises, mais elles peuvent très certainement être utilisées de manière inappropriée.

Questions connexes