Programmation en Java – Le pattern Singleton

image_pdfimage_print

Le Singleton a pour but de contrôler la création d’objets, en limitant le nombre d’objets en un seul. Comme il n’y a qu’une seule instance, les attributs d’instance d’un singleton ne se produiront qu’une seule fois par classe, tout comme les attributs statiques. Les singletons contrôlent souvent l’accès aux ressources, telles que les connexions de bases de données ou les sockets.
 
 
Par exemple, si vous avez une licence pour une seule connexion pour votre base de données ou si votre pilote JDBC a des problèmes avec le Multithreading, le Singleton s’assure qu’une seule connexion est établie ou qu’un seul Thread peut accéder à une connexion une seule fois.

 

Implémentation du Singleton

Exemple 1

L’implémentation la plus simple consiste en un constructeur privé et un attribut pour contenir son résultat, et une méthode d’accès statique avec un nom comme getInstance().

L’attribut privé peut être assigné à partir d’un bloc d’initialisation statique ou simplement, à l’aide d’un initialiseur. La méthode getInstance () (qui doit être publique) renvoie cette instance

//Nom du fichier: Singleton.java
public class Singleton {

   private static Singleton singleton = new Singleton();

  /* Un Constructeur privé empêche l'instanciation.*/
   private Singleton() { }

   /* Méthode statique */
   public static Singleton getInstance() {
      return singleton;
   }

   /* Autres méthodes */
   protected static void show() {
      System.out.println("Welcome to WayToLearnX!");
   }
} 

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

// Nom du fichier: SingletonTest.java
public class SingletonTest {

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

Cela produira le résultat suivant :

Welcome to WayToLearnX!

Exemple 2
L’implémentation suivante montre un modèle de conception d’un singleton classique

public class SingletonClassic {

   private static SingletonClassic instance = null;
   private SingletonClassic() {
      // Je suis là pour annuler l'instanciation.
   }

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

La classe SingletonClassic conserve une référence statique unique à l’instance singleton et renvoie cette référence depuis la méthode statique getInstance().

Ici, la classe SingletonClassic utilise une technique connue sous le nom ‘ instanciation paresseuse ‘ pour créer le singleton; Par conséquent, l’instance singleton n’est pas créée jusqu’à ce que la méthode getInstance () soit appelée pour la première fois. Cette technique garantit que les instances singleton ne seront créées que lorsque cela est nécessaire.
 
 

Partagez cet article

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *