Modèles de conception en C# : guide complet avec exemples de code

Formateur Python en ligne pour débutants

Apprenez Python facilement sans surcharge théorique. Résolvez des tâches pratiques avec vérification automatique et écrivez du code directement dans le navigateur.

Start Course

Modèles de conception en C# : guide complet avec exemples



Les modèles de conception (design patterns) sont des solutions éprouvées aux problèmes typiques du développement logiciel. Dans l'écosystème C# et .NET, ils aident à créer une architecture flexible, évolutive et maintenable. Dans cet article, nous analyserons quatre modèles clés : Singleton, Factory Method, Observer et Strategy, avec des exemples concrets en C#.



Pourquoi les modèles de conception sont-ils nécessaires en C# ?

Les modèles ne sont pas des bibliothèques ou des frameworks prêts à l'emploi. Ce sont des modèles conceptuels qui :

  • Simplifient la communication — les développeurs utilisent une terminologie unifiée
  • Améliorent la qualité du code — réduisent le couplage et augmentent la flexibilité
  • Font gagner du temps — il n'est pas nécessaire de réinventer la roue
  • Respectent les principes SOLID — la plupart des modèles implémentent ces principes


1. Singleton (Singleton)

Objectif : Garantir qu'une classe n'a qu'une seule instance et fournir un point d'accès global à celle-ci.



Quand l'utiliser :

  • Journaux (loggers)
  • Gestionnaires de configuration
  • Pools de connexions à la base de données
  • Caches


Exemple en C# (implémentation thread-safe) :

public sealed class ConfigurationManager{    private static readonly Lazy<ConfigurationManager> _instance =         new Lazy<ConfigurationManager>(() => new ConfigurationManager());

private readonly Dictionary<string, string> _settings;

private ConfigurationManager() { _settings = new Dictionary<string, string> { { "ConnectionString", "Server=localhost;Database=myDb" }, { "ApiKey", "12345-ABCDE" } }; }

public static ConfigurationManager Instance => _instance.Value;

public string GetSetting(string key) { return _settings.TryGetValue(key, out var value) ? value : null; }}

// Utilisationvar config = ConfigurationManager.Instance;Console.WriteLine(config.GetSetting("ConnectionString"));


Avantages :

  • Accès contrôlé à l'instance unique
  • Initialisation paresseuse (Lazy<T>)
  • Sécurité des threads sans verrous


2. Factory Method (Méthode de fabrique)

Objectif : Définir une interface pour créer un objet, mais permettre aux sous-classes de modifier le type d'objet créé.



Quand l'utiliser :

  • Lorsque le type concret de l'objet n'est pas connu à l'avance
  • Lorsque la création d'un objet nécessite une logique complexe
  • Pour séparer le code de création et d'utilisation


Exemple en C# :

// Produit abstraitpublic interface ILogger{    void Log(string message);}

// Produits concretspublic class FileLogger : ILogger{ public void Log(string message) => File.AppendAllText("log.txt", $"{DateTime.Now}: {message}");}

public class ConsoleLogger : ILogger{ public void Log(string message) => Console.WriteLine($"{DateTime.Now}: {message}");}

// Créateur avec méthode de fabriquepublic abstract class LoggerFactory{ public abstract ILogger CreateLogger(); public void LogMessage(string message) { var logger = CreateLogger(); logger.Log(message); }}

public class FileLoggerFactory : LoggerFactory{ public override ILogger CreateLogger() => new FileLogger();}

public class ConsoleLoggerFactory : LoggerFactory{ public override ILogger CreateLogger() => new ConsoleLogger();}

// UtilisationLoggerFactory factory = new ConsoleLoggerFactory();factory.LogMessage("Bonjour le monde !");


3. O

Blogs

Book Recommendations