mercredi 8 octobre 2025

Q/A Concepts de Base sur Singleton



🔹 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

  1. Instance unique : toujours le même objet.

  2. Accès global : souvent via Singleton.Instance.

  3. Constructeur privé : empêche la création d’autres instances.

  4. Thread-safe : la création concurrente doit être sécurisée.

  5. 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