Publié le 07/14/2017, rédigé par
Davy CLAISSE
Pattern Singleton
Implémentation du pattern en Java Singleton (sans le mot-clef Synchronized)
Attention : cet article est une des implémentations possibles du design pattern Singleton en Java. Cette implémentation est la plus facile à mettre en oeuvre et fournie de très bonne performances.
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. - [
OK ] Chargement / Récupération rapide de l'instance. - [
KO ] Instanciation seulement à la première invocation.
Diagramme de classes
Il est le même que la version synchronized bien plus lente que celle-ci.
Implémentation
public class MySingleton {
/**
* L'instance est 'static' afin d'être unique.
* L'instance est 'final' afin de ne jamais être réinstanciée.
*
* Le singleton est instancié au démarrage de la JVM qui gérera les accès
* concurrent une bonne fois pour toutes à ce moment là.
*/
private static final MySingleton INSTANCE = new MySingleton();
/**
* Le constructeur est privé afin d'éviter que d'autres classes puissent
* instancier un objet de cette classe.
*/
private MySingleton() {
}
/**
* Cette méthode n'a plus besoin d'être 'synchronized', les performances à
* la récupération seront quasi maximales.
*/
public static MySingleton getInstance() {
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'
}
}