Dans ce didacticiel, nous allons découvrir le modèle de conception singleton et comment l'appliquer en Java à l'aide d'exemples.
Singleton est un modèle de conception plutôt qu'une fonctionnalité spécifique à Java. Il garantit qu'une seule instance d'une classe est créée.
Un modèle de conception est comme notre bibliothèque de code qui comprend diverses techniques de codage partagées par des programmeurs du monde entier.
Java Singleton
Voici comment nous pouvons utiliser des singletons en Java.
- créer un
private
constructeur qui restreint la création d'un objet en dehors de la classe - créez un
private
attribut qui fait référence à l'objet singleton. - créer une
public static
méthode qui nous permet de créer et d'accéder à l'objet que nous avons créé. À l'intérieur de la méthode, nous allons créer une condition qui nous empêche de créer plus d'un objet.
Voici un exemple.
class SingletonExample ( // private field that refers to the object private static SingletonExample singleObject; private SingletonExample() ( // constructor of the SingletonExample class ) public static SingletonExample getInstance() ( // write code that allows us to create only one object // access the object as per our need ) )
Dans l'exemple ci-dessus,
private static SingletonExample singleObject
- une référence à l'objet de la classe.private SingletonExample()
- un constructeur privé qui restreint la création d'objets en dehors de la classe.public static SingletonExample getInstance()
- cette méthode retourne la référence au seul objet de la classe. Depuis la méthode statique, il est accessible en utilisant le nom de la classe.
Utilisation de la classe Singleton
Les singletons peuvent être utilisés tout en travaillant avec des bases de données. Ils peuvent être utilisés pour créer un pool de connexions pour accéder à la base de données tout en réutilisant la même connexion pour tous les clients. Par exemple,
class Database ( private static Database dbObject; private Database() ( ) public static Database getInstance() ( // create object if it's not already created if(dbObject == null) ( dbObject = new Database(); ) // returns the singleton object return dbObject; ) public void getConnection() ( System.out.println("You are now connected to the database."); ) ) class Main ( public static void main(String() args) ( Database db1; // refers to the only object of Database db1= Database.getInstance(); db1.getConnection(); ) )
Lorsque nous exécutons le programme, la sortie sera:
Vous êtes maintenant connecté à la base de données.
Dans notre exemple ci-dessus,
- Nous avons créé une base de données de classe singleton.
- Le dbObject est un champ de type classe. Cela fera référence à l'objet de la classe Database.
- Le constructeur privé
Database()
empêche la création d'objets en dehors de la classe. - La méthode de type de classe statique
getInstance()
renvoie l'instance de la classe vers le monde extérieur. - Dans la classe Main, nous avons la variable de type de classe db1. Nous appelons en
getInstance()
utilisant db1 pour obtenir le seul objet de la base de données. - La méthode
getConnection()
n'est accessible qu'en utilisant l'objet de la base de données. - Étant donné que la base de données ne peut avoir qu'un seul objet, tous les clients peuvent accéder à la base de données via une seule connexion.
Il est important de noter qu'il n'y a que quelques scénarios (comme la journalisation) où les singletons ont du sens. Même une connexion à une base de données ne doit généralement pas être un singleton.
Nous vous recommandons d'éviter complètement d'utiliser des singletons si vous n'êtes pas sûr de l'utiliser ou non. En savoir plus: Qu'est-ce qui est si mauvais à propos de Singleton?