Java - Comment utiliser la classe Singleton?

Le but du Singleton est de contrôler la création d'objets, en limitant le nombre d'objets à un seul. Puisqu'il n'y a qu'une seule instance de Singleton, tous les champs d'instance d'un Singleton ne se produiront qu'une seule fois par classe, tout comme les champs statiques. Les singletons contrôlent souvent l'accès aux ressources, telles que les connexions à la base de données ou les sockets.

Par exemple, si vous disposez d'une licence pour une seule connexion pour votre base de données ou que votre pilote JDBC a des problèmes avec le multithreading, Singleton s'assure qu'une seule connexion est établie ou qu'un seul thread peut accéder à la connexion à la fois.

Implémentation de Singletons

Exemple 1

L'implémentation la plus simple consiste en un constructeur privé et un champ pour contenir son résultat, et une méthode d'accesseur statique avec un nom comme getInstance ().

Le champ privé peut être attribué à partir d'un bloc d'initialisation statique ou, plus simplement, à l'aide d'un initialiseur. La méthode getInstance () (qui doit être publique) renvoie alors simplement cette instance -

// File Name: Singleton.java
public class Singleton {

   private static Singleton singleton = new Singleton( );

   /* A private Constructor prevents any other
    * class from instantiating.
    */
   private Singleton() { }

   /* Static 'instance' method */
   public static Singleton getInstance( ) {
      return singleton;
   }

   /* Other methods protected by singleton-ness */
   protected static void demoMethod( ) {
      System.out.println("demoMethod for singleton");
   }
}

Voici le fichier programme principal où nous allons créer un objet singleton -

// File Name: SingletonDemo.java
public class SingletonDemo {

   public static void main(String[] args) {
      Singleton tmp = Singleton.getInstance( );
      tmp.demoMethod( );
   }
}

Cela produira le résultat suivant -

Production

demoMethod for singleton

Exemple 2

L'implémentation suivante montre un modèle de conception Singleton classique -

public class ClassicSingleton {

   private static ClassicSingleton instance = null;
   private ClassicSingleton() {
      // Exists only to defeat instantiation.
   }

   public static ClassicSingleton getInstance() {
      if(instance == null) {
         instance = new ClassicSingleton();
      }
      return instance;
   }
}

La classe ClassicSingleton conserve une référence statique à l'instance de singleton unique et renvoie cette référence à partir de la méthode statique getInstance ().

Ici, la classe ClassicSingleton utilise une technique appelée instanciation paresseuse pour créer le singleton; par conséquent, l'instance singleton n'est pas créée tant que la méthode getInstance () n'est pas appelée pour la première fois. Cette technique garantit que les instances singleton ne sont créées qu'en cas de besoin.