|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Candidat au titre de Membre du Club
![]() Inscription : mai 2008 Messages : 47 ![]() |
Je me demandais pourquoi faire une class singleton si je peux tout simplement la faire avec tous mes attributs et mes méthodes static ? Ça reviendrait à la même chose non !? Le premier aurait seulement qu'une instance et le second utiliserait directement la class sans passer par une instance.
|
|
|
00
|
|
|
#2 |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 690 ![]() |
Salut,
Le singleton est un pattern de conception. Il s'agit de rendre compte que certains objets de l'application sont uniques. Exemple: le fichier de configuration, la connexion au SGDB,... Réaliser "cette propriété" avec du code dépend du langage de programmation utilisé. Avec un langage OO, "instancier" servira à appeler le constructeur et initialiser l'objet (ouvrir le fichier, la connexion,...). Si le propos est d'encapsuler des variables globales dans une classe, pas la peine d'instancier ni même d'appeler cela Singleton, "variables globales" est quand même plus juste. - W
__________________
Architectures Post-Modernes |
|
|
00
|
|
|
#3 | |
|
Membre expérimenté
![]() David Inscription : décembre 2003 Messages : 475 ![]() |
Citation:
Je me posais la même question que toi il y a quelques années. C'est un sujet très intéressant je trouve. Pour répondre à ta question, en apparence, oui, cela reviendrait au même, en réalité, c’est plus compliqué. Tout dépend de ce que tu veux mettre dans ces méthodes statiques. Si par exemple, tu veux mettre du métier et que tu souhaites réaliser des tests unitaires avec des outils standards, tu auras du mal à mocker ou stuber les appels à ces méthodes statiques puisque que cette classe n'a pas d'instance. (Il existe des apis qui modifient le bytecode pour cela mais je préfère ne pas les utiliser). L'argument est également valable si tu souhaites modéliser des hiérarchies de classes ou d’interfaces autour de ta classe. En effet, les méthodes statiques ne peuvent pas faire partie d’une hiérarchie de type, donc une classe qui ne comporte que des méthodes statiques perd donc rapidement son utilité dans une conception POO: la méthode est ni contractualisable (interface), ni héritable, ni redéfinissable (héritage). C'est pourquoi les classes final abstract non instantiable, qui comportent uniquement des méthodes statiques sont souvent des classes avec des méthodes utilitaires basiques, plutôt génériques, avec peu ou pas de logique métier et ne s'inscrivant pas dans une conception OO, ex : formatage de date, copy de beans, conversions, factory d’objets, etc… Ce type de classe ressemble davantage à ce que l'on fait dans les langages purement procéduraux. Elles ont leur utilité, car comme tu l'as remarqué, elles sont simples à créer et à manipuler. Mais elles ont également leur limite, à l'instar des langages procéduraux. Perso, je les utilise les mais j’essaye de le faire à bon escient.
__________________
Ils flottent tous en bas |
|
|
|
00
|
|
|
#4 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 690 ![]() |
Salut,
Citation:
- W
__________________
Architectures Post-Modernes |
|
|
|
00
|
|
|
#5 | |
|
Membre expérimenté
![]() David Inscription : décembre 2003 Messages : 475 ![]() |
Citation:
En C#, j'ai également eu à faire à ce type de problématique. En même temps, c'était un clone de Java à l'origine... Tu parles de quel langage en particulier ?
__________________
Ils flottent tous en bas |
|
|
|
00
|
|
|
#6 |
|
Membre confirmé
![]() Inscription : avril 2010 Messages : 182 ![]() |
Bonjour,
Il me semble qu'une autre différence est le temps d'accès et la possibilité de décharger un singleton de la mémoire. Les attributs et méthodes static doivent rester en mémoire dès lors que la classe est appelée une fois, alors que pour un singleton, si l'instance unique est passée à null (à l'aide d'une méthode static "Liberer" par exemple), ses membres ne se trouvent plus en mémoire. Par contre, à chaque fois qu'on l'instancie, il y a un temps de création de l'objet ... Sauf si je me trompe, le singleton a ces deux particularités par rapport aux attributs et méthodes static. |
|
|
00
|
|
|
#7 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 690 ![]() |
Citation:
De plus le Singleton est un pattern de conception, on le réalisera en fonction des besoins et des possibilités du langage. - W
__________________
Architectures Post-Modernes |
|
|
|
00
|
|
|
#8 | |
|
Expert Confirmé Sénior
![]() Inscription : juin 2008 Messages : 3 690 ![]() |
Citation:
Ces fonctionnalités supplémentaires coûteront "plus". Ceci dit, lorsqu'on code dans un langage particulier, il y a des "bonnes pratiques" côté réalisation d'un Singleton qu'il peut être judicieux de respecter: tout le monde reconnaîtra la réalisation d'un Singleton... Cette réalisation a des fonctionnalités superflues vis à vis du Singleton de la "conception" mais on évitera des pertes de temps à assurer que la "réalisation" est fidèle aux attentes (à la "conception"), - W
__________________
Architectures Post-Modernes |
|
|
|
00
|
Copyright © 2000-2013 - www.developpez.com