2011-05-11 4 views
2

Donc, je viens de plonger dans les classes Singleton et oui, je les trouve très utiles. J'utilise mes singletons principalement pour le stockage de données pour plusieurs cibles (vues, tableaux, etc.). Cela étant dit, je peux déjà me voir mettre en œuvre beaucoup de singletons dans mon projet.Conséquences des Singletons

Mais beaucoup de singletons peuvent-ils avoir un impact négatif? D'après ce que j'ai lu sur les singletons, c'est que vous créez une instance pour chacun d'eux dans un processus. D'autres instances de classe sont libérées (en supposant qu'elles soient libérées correctement) de la mémoire, alors les singletons devraient-ils être libérés aussi? Donc, pour réduire à une question: Est-il dangereux d'avoir beaucoup de singletons?

Répondre

1

Les singletons ne sont pas à l'échelle. Peu importe ce que vous pense devrait être un singleton, lorsque votre système devient plus grand, il se avère que vous avez besoin de plus d'un.

Si vous n'en avez JAMAIS besoin de plus d'un, un singleton est bon. Cependant, à mesure que les systèmes évoluent, vous avez généralement besoin de plus d'un quoi que ce soit dans son propre contexte.

Les singletons sont simplement une autre façon de dire "global". Ce n'est pas mauvais, mais en général, ce n'est pas une bonne idée pour les systèmes qui évoluent et deviennent de plus en plus complexes.

+0

Hm, je vois ce que vous voulez dire. Fait moi répondre à ma propre question aussi, merci pour le commentaire! –

1

De GOF livre:

Le modèle Singleton a plusieurs avantages:

  1. accès contrôlé à l'instance unique. Parce que la classe Singleton encapsule sa seule instance, elle peut avoir un contrôle strict sur la façon dont et quand les clients y accèdent.

  2. Espace de nom réduit. Le modèle Singleton est une amélioration par rapport aux variables globales. Cela évite de polluer l'espace de noms avec des variables globales qui stockent des instances uniques.

  3. Permet d'affiner les opérations et la représentation. La classe Singleton peut être sous-classée, et il est facile de configurer une application avec une instance de cette classe étendue. Vous pouvez configurer l'application avec une instance de la classe dont vous avez besoin au moment de l'exécution.

  4. Autorise un nombre variable d'instances. Le motif permet de changer d'avis et d'autoriser plusieurs instances de la classe Singleton . En outre, vous pouvez utiliser la même approche pour contrôler le nombre des instances que l'application utilise. Seule l'opération qui accorde l'accès à l'instance Singleton doit être modifiée.

  5. Plus flexible que les opérations de classe. Une autre façon d'empaqueter la fonctionnalité d'un singleton est d'utiliser la classe Singleton peut être sous-classé. opérations de classe (c'est-à-dire, fonctions membres statiques dans C++ ou méthodes de classe dans Smalltalk). Mais ces deux techniques de langage rendent difficile la modification d'une conception pour permettre plus d'une instance ofclass. De plus, les fonctions membres statiques en C++ ne sont jamais virtuelles, donc les sous-classes ne peuvent pas les remplacer de manière polymorphique.