|
Publié le 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.

Diagramme de classes Singleton

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'
    }
}