Bonjour,
j'aimerais bien qu'on m'explique à quoi sert le design pattern support d'initialisation à la demande (initialization on demand holder). Je n'ai pas trop compris la différence avec le simple singleton.
Singleton :
Initialization on demand holder :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public class Singleton { private static final Singleton INSTANCE = new Singleton(); private Singleton() {} public static Singleton getInstance() {return INSTANCE;} }
Je sais que les variables static sont initialisées à l'initialisation de la classe et qu'en mettant INSTANCE à l'intérieur d'une méthode, cette initialisation n'a donc pas lieu en même temps que celle de la classe mais seulement à l'appel de getInstance(). Mais ça change quoi ?
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 public class Singleton { private Singleton() {} private static class SingletonHolder { public static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } }
J'ai cru comprendre que c'était pour éviter que deux threads concurrents ne puissent se retrouver avec des instances différentes su Singleton, mais là j'ai pas compris comment...
Partager