Dans la plupart des langages de programmation, les classes échappent à une grande partie du système de types. Alors qu'une classe, avec ses méthodes et variables statiques 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, car il ne peut pas être le sous-type d'un autre type. Par exemple, si vous avez une interface IFooable
, qui est requise par plusieurs signatures de méthode d'autres classes, l'objet de classe ne StaticFoo
peut pas être utilisé à la place de IFooable
, alors que FooSingleton.getInstance()
can (en supposant, FooSingleton
implémente IFooable
).
Veuillez noter que, comme je l'ai commenté sur 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 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 motif de fabrique et doit être traité comme tel. L'utilisation courante en fait plutôt le cas particulier des registres globaux, qui finissent souvent par être mauvais, car les registres globaux ne doivent pas être utilisés bon gré mal gré.
Si vous prévoyez de fournir des fonctions d'assistance globales, les méthodes statiques fonctionneront parfaitement. La classe n'agira pas en tant que classe, mais simplement en tant qu'espace de noms. Je suggère que vous préserviez une cohésion élevée, ou vous pourriez vous retrouver avec les problèmes de couplage les plus étranges.
Greetz
back2dos