Publié le 07/13/2017, rédigé par
Davy CLAISSE
Pattern Singleton
Implémentation du pattern en Java Singleton (avec le mot-clef Synchronized)
Attention : cet article est une des implémentations possibles du design pattern Singleton en Java. Cette implémentation est fournie à titre d'exemple mais fait partie de celle à éviter.
La liste des implémentations possibles en Java est accessible en bas de cette page.
Caractéristiques de cette implémenation :
- [
OK ] Une seule et unique instance pour toute l'application. - [
OK ] Gestion des accès multi-threads. - [
OK ] Instanciations extérieures impossibles. - [
KO ] Chargement / Récupération rapide de l'instance. - [
OK ] Instanciation seulement à la première invocation.
Diagramme de classes
Implémentation
public class MySingleton {
/**
* L'instance est 'static' afin d'être unique.
*/
private static MySingleton INSTANCE;
/**
* Le constructeur est privé afin d'éviter que d'autres classes puissent
* instancier un objet de cette classe.
*/
private MySingleton() {
}
/**
* Cette méthode permet de récupérer l'instance du singleton. Cependant,
* si le mot-clef 'synchronized' est indispensable afin de gérer la
* création de l'instance dans le cas d'appels multi-threads, il devient
* coûteux et inutile dès que l'instance est créée.
*/
public static synchronized MySingleton getInstance() {
if (MySingleton.INSTANCE == null) {
MySingleton.INSTANCE = new MySingleton();
}
return MySingleton.INSTANCE;
}
// Exemple d'utilisation
public static void main(String... args) {
MySingleton a, b;
a = MySingleton.getInstance(); // L'instance est créée.
b = MySingleton.getInstance(); // La première instance est retournée
System.out.println(a == b); // Références identiques => affiche 'true'
}
}