Classe Singleton en Java - Comment utiliser la classe Singleton?



Cet article sur la classe Singleton en Java parle des différentes façons dont une classe peut être transformée en Singleton avec des implémentations pratiques.

En Java, une classe singleton est une classe qui ne peut avoir qu'une seule instance à la fois. C'est l'un des cinq modèles de conception créative en Java qui aide au développement sans effort de . Au travers de cet article, je vais vous donner un aperçu clair de ce qu'est une classe singleton en Java et comment vous pouvez la créer.

Voici les sujets que je couvrirai dans cet article:





Commençons.

Qu'est-ce qu'une classe Singleton en Java?

En termes simples, une classe Singleton en Java est la classe qui permet d'y accéder via une seule instance à la fois. Ce modèle de conception permet de restreindre l'instanciation inutile d'une classe et de garantir qu'une seule existe à tout moment par instance JVM. Ainsi, avec ce modèle, toute classe définie comme Singleton n'a qu'une seule instanceavec un point d'accès global. Contrairement aux classes normales, une classe singleton n'est pas détruite à la fin du cycle de vie des applications.



types de fonctions dans sql

Mais pourquoi avons-nous besoin d'une classe Singleton en premier lieu?

Eh bien, en restreignant la création d'instance d'une classe, cela permet d'économiser de l'espace mémoire car désormais l'objet ne sera plus créé à chaque fois qu'une nouvelle requête est effectuée. Au lieu de cela, un seul objet sera utilisé à plusieurs reprises. C'est la raison pour laquelle le modèle Singleton en Java est principalement utilisé avec et les applications de base de données. Il est essentiellement utilisé pour la journalisation, la mise en cache, le pool de threads, les paramètres de configuration et bien d'autres.

J'espère que vous êtes clair avec le concept de classe Singleton en Java. Alors, allons maintenant plus loin dans ceArticle Singleton Class in Java et découvrez comment ils sont créés.



Façons de concevoir une classe Java Singleton

Pour créer un singleton de classe en Java, vous avez besoin des trois éléments suivants:

  1. membre statique d'une classe
  2. constructeur privé
  3. méthode d'usine statique

Puisque Java permet aux développeurs d'explorer leurs horizons, il existeun certain nombre de façons dont vous pouvez concevoir une classe Singleton. Ci-dessous, j'ai répertorié les plus populaires.

quelle idée utiliser pour java
  1. Méthode d'initialisation hâtive
  2. Méthode d'initialisation paresseuse
  3. Méthode Thread Safe Singleton
  4. Initialisation paresseuse avec la méthode Double Lock
  5. Méthode de chargement différé
  6. Méthode d'initialisation de bloc statique

Examinons à présent chacune de ces approches une par une.

1. Méthode d'initialisation hâtive

C'est la méthode la plus simple pour créer une classe Singleton où l'instance est créée au moment du chargement de la classe. Pour créer une classe singleton à l'aide de cette méthode, vous devez suivre les étapes ci-dessous:

  1. Déclarez le constructeur privé.
  2. L'étape suivante consiste à créer un membre de classe privé pour cette classe Singleton.
  3. Maintenant, vous devez définir une méthode de fabrique qui sera utilisée pour renvoyer l'objet de votre classe, que nous avons créé comme instance du membre de la classe.
  4. Vous pouvez même déclarer un membre statique public si vous souhaitez accéder directement à cette instance statique.

Voyons maintenant comment les mettre en œuvre.

// Classe publique Eager Initialization EagerSingleton {private static final EagerSingleton INSTANCE = new EagerSingleton () private EagerSingleton () {} public static EagerSingleton getInstance () {return INSTANCE}}

Si vous voyez le code, vous pouvez observer que chaque fois que nous instancions un objet, nous utilisons legetInstance ()méthode plutôt que d'appeler la classe constructeur .Mais il a ses propres inconvénients. Si vous utilisez cette méthode pour créer un singleton de classe, une instance serait créée indépendamment du fait que l'application l'utilise ou non.

Alors, allons de l'avant et voyons une autre façon de créer une classe singleton en Java.

2. Méthode d'initialisation paresseuse

Cette méthode est appelée initialisation différée car elle reporte la création de l'instance de classe jusqu'à sa première utilisation. Ce que je veux dire, c'est qu'avec cette méthode, un objet n'est créé que s'il est nécessaire. Cela aide à éviter la création inutile du . Pour concevoir une classe singleton de cette manière, vous devez suivre les étapes ci-dessous:

  1. Tout d'abord, déclarez le constructeur comme privé.
  2. Ensuite, vous devez créer une instance statique privée pour cette classe, mais vous n'avez pas encore besoin de l'instancier.
  3. Enfin, créez une méthode de fabrique qui vérifiera d'abord si le membre d'instance est nul ou non. Sinon, il créera une instance de la classe singleton pour vous et la renverra.

Le code ci-dessous montre comment effectuer cela.

// Lazy Initialization Classe publique LazySingleton {private static LazySingleton INSTANCE = null private LazySingleton () {} public static LazySingleton getInstance () {if (INSTANCE == null) {synchronized (LazySingleton.class) {INSTANCE = new LazySingleton ()}} retourne INSTANCE}}

3. Thread Safe Singleton Méthode

Mais l'approche ci-dessus peut soulever certaines préoccupations dans les scénarios simultanés. Étant donné que le modèle singleton est principalement utilisé avec les multi-threads et siplusieurs threads entrent la condition if en même temps, cela peut soulever des problèmes. Pour éviter cela, nous essayons de créer une classe singleton thread-safe en synchronisant la méthode d'accès globale. Cela garantit qu'un seul thread exécute cette méthode à tout moment. Reportez-vous au code ci-dessous pour voir l'implémentation:

// Thread Safe Singleton classe publique ThreadSafeSingleton {private static ThreadSafeSingleton INSTANCE private ThreadSafeSingleton () {} public static synchronized ThreadSafeSingleton getInstance () {if (INSTANCE == null) {INSTANCE = new ThreadSafeSingleton ()} return INSTANCE}}

Mais parfois cette approche peut aussi devenir très lourde car à chaque fois la méthodeest invoqué, il doit attendre que le verrou soit libéré avant que la méthode puisse l'utiliser. Cela ralentit le processus et nous conduit à la prochaine approche qui estInitialisation paresseuse avec Double Lock.

4. Initialisation paresseuse avec double verrouillage Méthode

Dans cette approche, nous ne synchronisons pas les méthodes. Nous enveloppons plutôt le code de création d'objet dans un bloc synchronisé.Vous pouvez dire qu'en vérifiant les verrous de fil au préalable, ilréduit le nombre d'acquisitions de verrous. Cette approche permet généralement d'améliorer les performances de l'application. Consultez le code ci-dessous pour voir comment cela est fait.

// Initialisation paresseuse avec la classe publique Double Lock LazyDoubleLockSingleton {private static LazyDoubleLockSingleton INSTANCE = null private LazyDoubleLockSingleton () {} public static LazyDoubleLockSingleton getInstance () {if (INSTANCE == null) {synchronized (LazyDoubleLockSingleton.class) {synchronized (LazyDoubleLockSingleton.class) null) {INSTANCE = new LazyDoubleLockSingleton ()}}} return INSTANCE}}

5. Méthode de chargement différé

Cette méthode est basée sur JSL (Java Language Specification) et selon cette chargera les membres de données statiques uniquement lorsqu'ils sont requis. Ainsi, lorsque votre classe singleton est chargée dans la JVM, aucune instance n'est créée. En outre, lors de l'exécution du programme, la méthode globale est invoquée dans un ordre séquentiel. Avec cette méthode, vous n'avez pas besoin de synchroniser explicitement le getInstance () statique pour charger et initialiser. Le membre de classe statique sera appelé de manière séquencée appropriée, le reste des appels simultanés de la méthode globale sont renvoyés dans le même ordre sans avoir à effectuer la surcharge de synchronisation.

Voici le code pour effectuer la même chose.

// Méthode de chargement différé Classe publique LazyLoadSingleton {private LazyLoadSingleton () {} classe statique privée SingletonClassHolder {variable finale statique INSTANCE = new LazyLoadSingleton ()} public statique LazyLoadSingleton getInstance () {return SingletonClassHolder.INSTANCE}}

6. Méthode d'initialisation de bloc statique

Cette méthode de création d'une classe singleton en Java estsimilaire à la méthode d'initialisation hâtive. La seule différence est que l'instance de cette classe est créée dans le bloc statique ayant Fonctionnalité.

// Initialisation de bloc statique Classe publique StaticBlockSingleton {statique privée StaticBlockSingleton INSTANCE private StaticBlockSingleton () {} // gestion des exceptions dans le bloc statique static {try {INSTANCE = new StaticBlockSingleton ()} catch (Exception e) {throw new RuntimeException ('Exception survenue lors de la création d'une classe Singleton ')}} public static StaticBlockSingleton getInstance () {return INSTANCE}}

Cela nous amène à la fin de cet article sur la classe Singleton en Java. Si vous souhaitez en savoir plus sur Java, vous pouvez consulter notre .

Maintenant que vous avez compris ce qu'est une classe Singleton en Java, consultez le par Edureka, une entreprise d'apprentissage en ligne de confiance avec un réseau de plus de 250 000 apprenants satisfaits répartis dans le monde entier. Le cours de formation et de certification Java J2EE et SOA d'Edureka est conçu pour les étudiants et les professionnels qui souhaitent devenir développeur Java. Le cours est conçu pour vous donner une longueur d'avance dans la programmation Java et vous former aux concepts Java de base et avancés ainsi qu'à divers frameworks Java tels que Hibernate et Spring.

chaîne de date java à ce jour

Vous avez une question pour nous? Veuillez le mentionner dans la section commentaires de cet article «Singleton Class in Java» et nous vous répondrons dans les plus brefs délais.