=== Singleton ===
Le modèle Singleton est un modèle de conception qui appartient à la catégorie des modèles de création. L'objectif principal du Singleton est de garantir qu'une classe n'a qu'une seule instance et de fournir un point d'accès global à cette instance.
Les caractéristiques clés du modèle Singleton sont les suivantes
1. Instance Unique : Le Singleton garantit qu'il n'y a qu'une seule instance de la classe et fournit un moyen d'y accéder depuis n'importe quel point du programme.
2. Accès Global : Il offre un point d'accès global à cette unique instance, généralement à travers une méthode statique (comme `Instance`).
3. Constructeur Privé : Le constructeur de la classe Singleton est privé pour empêcher l'instanciation directe de la classe depuis l'extérieur.
4. Lazy Initialization (initialisation paresseuse) : L'instance n'est créée que lorsqu'elle est demandée pour la première fois, plutôt qu'à la création de l'application.
using System;
public sealed class Singleton<T> where T : class, new()
{
private static readonly object lockObject = new object();
private static T instance = null;
private Singleton()
{
// Constructeur privé pour empêcher l'instanciation directe.
}
public static T Instance
{
get
{
lock (lockObject)
{
if (instance == null)
{
instance = new T();
}
return instance;
}
}
}
public void ExampleMethod()
{
Console.WriteLine("Méthode d'exemple du Singleton<T>");
}
}
class Program
{
static void Main()
{
// Accéder à l'instance du Singleton<T>
Singleton<Program> singletonInstance = Singleton<Program>.Instance;
// Appeler une méthode de l'instance
singletonInstance.ExampleMethod();
// Notez que vous ne pouvez pas
// instancier directement avec "new
// Singleton<Program>()"
// car le constructeur est privé. Vous devez
//utiliser l'instance unique avec
//Singleton<Program>.Instance.
}
}
Cette implémentation du Singleton générique suit le même principe que celle du Singleton standard, mais elle utilise un type générique `T` pour rendre le Singleton réutilisable pour différentes classes. Assurez-vous que le type `T` a un constructeur public sans paramètre.
Aucun commentaire:
Enregistrer un commentaire