Dans la plupart des langages de programmation échapper à une grande partie du système de type. Alors qu'une classe, avec ses méthodes statiques et ses variables, est un objet, elle ne peut très souvent pas implémenter une interface ou étendre d'autres classes. Pour cette raison, il ne peut pas être utilisé de manière polymorphe, puisqu'il ne peut pas être le sous-type d'un autre type. Par exemple, si vous avez une interface IFooable
, requise par plusieurs signatures de méthode d'autres classes, l'objet de classe StaticFoo
ne peut pas être utilisé à la place de IFooable
, alors que FooSingleton.getInstance()
peut (en supposant que FooSingleton
implémente IFooable
).
Veuillez noter que, comme j'ai commenté la réponse de Heinzi, un singleton est un modèle pour contrôler l'instanciation. Il remplace new Class()
par Class.getInstance()
, ce qui donne à l'auteur de Class
plus de contrôle sur les instances, qu'il peut utiliser pour empêcher la création d'instances inutiles. Le singleton est juste un cas très particulier du modèle d'usine et devrait être traité comme tel. L'utilisation commune en fait plutôt le cas particulier des registres globaux, qui finissent souvent mal, parce que les registres globaux ne devraient pas être utilisés simplement bon gré mal gré.
Si vous envisagez de fournir des fonctions d'assistance globales, les méthodes statiques fonctionneront parfaitement. La classe n'agira pas en tant que classe, mais plutôt en tant qu'espace de noms. Je suggère, vous conservez une haute cohésion, ou vous pourriez vous retrouver avec des problèmes de couplage les plus étranges.
greetz
back2dos
duplication possible de http://stackoverflow.com/questions/720744/static-class-and-singleton –
Ne pensez pas puisque nous parlons de 2 langages différents, donc la réponse peut varier, mais merci pour le lien, en java n'a jamais entendu le terme "monostate" –