Bonsoir,
Si une classe implemente le pattern singleton, existe-t-il une raison pour qu'une de ses méthodes soit static ?
Merci de vos suggestion..
Bonsoir,
Si une classe implemente le pattern singleton, existe-t-il une raison pour qu'une de ses méthodes soit static ?
Merci de vos suggestion..
La méthode permettant d'accéder au singleton, par exemple. (En fait, pas forcément, mais disons que ça reste un cas typique.)
Singleton ou pas, ça n'a pas vraiment d'importance, les méthodes statiques sont une curiosité pas vraiment nécessaires, mais qui sont en réalité des "fonctions" globales, rangées, associées avec la classe qui leur correspond le mieux.
Disons que s'il y a besoin d'une méthode statique, et que sa fonctionnalité est très liée à la classe en question, alors oui, sa place est là. Rien à voir avec quelque pattern que ce soit.
Pour garantir le pattern Singleton, il FAUT que le constructeur soit déclaré "private" (pour interdire une instanciation) et au moins UNE méthode static pour récupérer l'instance unique de l'objet (on l'appelle généralement getInstance()).
Pour le reste, static ou non static, tout dépend de ce qu'on fait.
Il est très intéressant dans une classe utilitaire de n'avoir que des méthodes static, ça évite d'avoir à créer une instance d'un objet pour les utiliser.
Typiquement, pour l'acquisition d'une connexion à la base de données, on ferait
Avec ce genre d'outil, quelque soit la classe dans le projet, on pourra récupérer une connexion comme ceci, sans instance de DBUtils
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14 class DBUtils { public static Connection getConnection() { try { Class.forName("la classe du driver"); return DriverManager.getConnection("url de la base", "user", "password"); } catch (Exception e) {} return null; } }
Une autre utilisation pour une propriété d'une classe serait liée au partage de la valeur quelque soit la classe, sans avoir à passer une référence de l'instance d'un objet.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4 ... Connection connection = DBUtils.getConnection(); ...
Bref, il y a de nombreuses utilisations possible.
La seule chose à comprendre, c'est que ce qui est déclaré static est lié à la classe pour UNE JVM (dans le cadre d'une application multi-tiers, inutile de croire qu'on partagera quoi que ce soit entre 2 serveurs comme ça)
Je me permet de préciser: c'est lié à 1 classloader! Si dans un jvm la classe est chargée par deux classloader séparé, elles auront chacun leur lot de données statiquesExemple typique, une librairie identique utilisé par deux application différente dans un serveur java enterprise, chaque application aura sa version de la librairie et donc son lot de données statiques
![]()
c'est comme les maladies, maudit une fois t'es immunisé![]()
Partager