🔹 1. Qu'est-ce qu'un Singleton en programmation orientée objet ?
-
Définition : Le pattern Singleton garantit qu’une classe n’a qu’une seule instance et fournit un point d’accès global à cette instance.
-
Exemple conceptuel :
public class Singleton
{
private static Singleton _instance;
private Singleton() { }
public static Singleton Instance => _instance ??= new Singleton();
}
🔹 2. Pourquoi utilise-t-on le pattern Singleton ?
-
Contrôler l’accès à une ressource partagée (ex : cache, configuration, moteur de calcul).
-
Assurer cohérence des données et éviter plusieurs instances coûteuses.
-
Simplifier la gestion de configuration globale ou de services centralisés.
🔹 3. Caractéristiques principales d’un Singleton
-
Instance unique : toujours le même objet.
-
Accès global : souvent via
Singleton.Instance. -
Constructeur privé : empêche la création d’autres instances.
-
Thread-safe : la création concurrente doit être sécurisée.
-
Lazy initialization : l’instance est souvent créée uniquement à la première utilisation.
🔹 4. Différence entre Singleton et classe statique
| Critère | Singleton | Classe statique |
|---|---|---|
| Instance | Unique instance sur le heap | Pas d’instance, tout static |
| Héritage | Peut implémenter interface ou hériter | Pas d’héritage |
| Interface | Peut implémenter des interfaces | Non |
| Cycle de vie | Contrôlé, lazy possible | Instanciée dès le chargement du type |
| Utilisation | Ressources partagées avec état | Méthodes utilitaires stateless |
🔹 5. Comment garantir qu’une classe n’a qu’une seule instance ?
-
Constructeur privé pour empêcher
new. -
Static property pour stocker l’instance.
-
Lazy initialization thread-safe :
public class Singleton
{
private static readonly Lazy<Singleton> _instance = new(() => new Singleton());
public static Singleton Instance => _instance.Value;
private Singleton() { }
}
🔹 6. Pourquoi le constructeur privé est-il important ?
-
Empêche toute création directe via
new. -
Garantit que l’accès à l’instance se fait uniquement via la propriété statique.
-
Essentiel pour maintenir l’unicité de l’objet.
🔹 7. Singleton en mémoire vs Singleton distribué
| Type | Description | Exemple |
|---|---|---|
| Singleton en mémoire | Une instance unique dans un processus | Cache en mémoire locale |
| Singleton distribué | Une instance unique accessible par plusieurs processus ou serveurs | Redis cache, service central de configuration |
✅ Singleton distribué nécessite un coordonnateur externe ou un store partagé pour maintenir l’unicité.
🔹 8. Fonctionnement du Garbage Collector dans .NET Core
-
GC générationnel : Gen0, Gen1, Gen2
-
Allocations sur le heap managé
-
Collections :
-
Gen0 : objets temporaires → collecte rapide
-
Gen1 : objets intermédiaires
-
Gen2 : objets long-lived → moins fréquents
-
-
Impact sur Singleton :
-
Une instance statique (Singleton) vit tant que l’application est active, peu de risque d’être collectée.
-
🔹 9. Principales nouveautés introduites dans .NET 6 / 7 / 8
| Version | Nouveautés clés |
|---|---|
| .NET 6 | Minimal APIs, Hot Reload, C# 10 features (global using, file-scoped namespace), MAUI, performance improvements |
| .NET 7 | Amélioration JIT et GC, LINQ enhancements, performance HTTP, DateOnly/TimeOnly |
| .NET 8 | Native AOT, rate-limited HTTP clients, improved JSON serialization, further GC/Threading optimization |
🔹 10. Exécution multi-plateforme dans .NET Core
-
.NET Core / .NET 5+ est cross-platform : Windows, Linux, macOS
-
Compilation JIT sur la plateforme cible, ou AOT (Ahead-of-Time) pour native binaries
-
Runtimes partagés : une seule base de code peut s’exécuter sur plusieurs OS sans modification
-
Utilisation des bibliothèques .NET Standard / .NET 6+ pour compatibilité multi-plateforme
📘 Synthèse des concepts Singleton et .NET
| Concept | Points clés |
|---|---|
| Singleton | Instance unique, constructeur privé, accès global |
| Classe statique | Pas d’instance, tout statique, utilitaires |
| Singleton distribué | Nécessite coordination externe |
| Garbage Collector | Générations 0/1/2, Singleton vivant tant que l’application |
| .NET 6/7/8 | Minimal APIs, Hot Reload, MAUI, AOT, perf améliorée |
| Multi-plateforme | JIT / AOT, Windows/Linux/macOS, .NET Standard |
Aucun commentaire:
Enregistrer un commentaire