JavaRush /Blog Java /Random-FR /Modèle Singleton dans vos propres mots
Roman_kh
Niveau 33
Харьков

Modèle Singleton dans vos propres mots

Publié dans le groupe Random-FR

Bonjour à tous, javaRush !

Aujourd’hui je vais vous parler du design pattern Singleton(single). Modèle Singleton dans vos propres mots - 1Objectif : créer une classe qui n’aura qu’UN seul objet. Cela signifie que quel que soit le nombre d'accès, le même objet créé la première fois sera renvoyé. C'est une chose pratique et nécessaire dans de nombreux endroits, ce n'est pas pour rien qu'elle est implémentée dans des frameworks. Application:
  • Par exemple, vous devez connecter une base de données à un projet et une classe qui se chargera de s'y connecter. La connexion est créée une fois et il n'est pas nécessaire de la créer encore et encore
  • Application settings— une classe responsable des paramètres de connexion nécessaires à l'application : hôte et port de la base de données, etc. Ils sont créés une seule fois et utilisés tout au long du fonctionnement de l'application.
  • Il existe de nombreux autres exemples que je n’ai pas mentionnés, alors écrivez vos options dans les commentaires ! =)
Après cette introduction, si je comprends bien, nous pouvons montrer un exemple de cette classe : (Même si je suis sûr que chacun de nous peut en proposer une implémentation) Voici l'exemple le plus simple, lorsque nous rendons le constructeur privé, c'est-à-dire Vous ne pouvez pas créer explicitement un objet. Et il existe une méthode statique getInstance()qui fournit un objet.
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Il y a des problèmes avec le multithreading et vous pouvez alors mettre une méthode getInstance()de marqueur synchronized:
public class Singleton {
  private static Singleton instance;
  private Singleton () {}

  public static synchronized Singleton getInstance() {
    if (instance == null) {
      instance = new Singleton();
    }
    return instance;
  }
}
Au final, comme d'habitude, je tiens à dire que si vous pensez différemment ou trouvez une erreur en moi, écrivez dans les commentaires ! Nous discuterons de tout avec plaisir :) Si vous avez aimé l'article, écrivez « + » et je le saurai. C'est important pour moi :) PS J'ajoute plus d'implémentations : selon Joshua Bloch , c'est la meilleure façon d'implémenter le modèle.Enum Singleton
public enum Singleton {
   INSTANCE;
}
Double Checked Locking & volatile
public class Singleton {
        private static volatile Singleton instance;

        public static Singleton getInstance() {
      Singleton localInstance = instance;
      if (localInstance == null) {
         synchronized (Singleton.class) {
            localInstance = instance;
            if (localInstance == null) {
               instance = localInstance = new Singleton();
            }
         }
      }
      return localInstance;
   }
}
Et plus loin On Demand Holder idiom:
public class Singleton {

   public static class SingletonHolder {
      public static final Singleton HOLDER_INSTANCE = new Singleton();
   }

   public static Singleton getInstance() {
      return SingletonHolder.HOLDER_INSTANCE;
   }
}
+Initialisation paresseuse +Hautes performances -Ne peut pas être utilisé pour les champs de classe non statiques Toutes les questions/suggestions - écrivez dans les commentaires ! Voir aussi mes autres articles :
Commentaires
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION