Introduction aux patrons de conception
Fait partie de la section Programmation Orientée Objet du Journey C# de Coddy. Leçon 51 sur 70.
Les patrons de conception sont des solutions éprouvées à des problèmes courants que les développeurs rencontrent régulièrement lors de la création de logiciels. Plutôt que de réinventer la roue à chaque fois, les patrons nous fournissent un vocabulaire commun et des approches testées pour structurer le code.
Considérez les patrons de conception comme des plans. Ils ne vous donnent pas de code exact à copier, mais décrivent comment organiser les classes et les objets pour résoudre des problèmes spécifiques. Lorsqu'une personne mentionne « utilisez le patron Factory ici », les développeurs expérimentés comprennent immédiatement la structure générale proposée.
Les patrons de conception se répartissent en trois grandes catégories :
| Catégorie | Objectif | Exemples |
|---|---|---|
| Création | Comment les objets sont créés | Singleton, Factory |
| Structure | Comment les objets sont composés | Adapter, Decorator |
| Comportement | Comment les objets communiquent | Observer, Strategy |
Les modèles que nous allons explorer s'appuient directement sur les concepts de la POO que vous avez déjà appris : les interfaces, l'héritage, le polymorphisme et la composition. Chaque modèle exploite ces fondamentaux de manières spécifiques pour atteindre la flexibilité, la maintenabilité ou la réutilisabilité.
Dans les prochaines leçons, vous implémenterez plusieurs modèles essentiels, en commençant par Singleton, Factory, Observer et Strategy. Comprendre ces modèles vous aidera à reconnaître les solutions courantes dans les bases de code existantes et à prendre de meilleures décisions architecturales dans vos propres projets.
Défi
FacileConstruisons un système simple de catalogue de patrons qui organise les informations sur les patrons de conception dans plusieurs fichiers. Cela vous aidera à comprendre comment les patrons sont catégorisés tout en vous exerçant à une bonne organisation du code.
Vous allez créer trois fichiers pour séparer les différentes responsabilités :
Pattern.cs: définissez une classePatterndans l’espace de nomsPatternsqui représente un seul patron de conception. Chaque patron doit avoir unName, uneCategory(Creational, Structural ou Behavioral) et uneDescription. Incluez une méthodeGetSummary()qui renvoie une chaîne formatée :[{Category}] {Name}: {Description}PatternCatalog.cs: créez une classePatternCatalogdans l’espace de nomsPatternsqui gère une collection de patrons. Votre catalogue doit pouvoir ajouter des patrons et disposer d’une méthodeGetPatternsByCategory(string category)qui renvoie une liste de tous les patrons correspondant à cette catégorie. Incluez également une méthodeGetAllSummaries()qui renvoie une liste de chaînes récapitulatives pour tous les patrons du catalogue.Program.cs: rassemblez tous les éléments en créant un catalogue et en le remplissant avec des patrons à partir de l’entrée. Affichez ensuite les patrons filtrés par catégorie.
Vous recevrez les entrées suivantes :
- Le nombre de patrons à ajouter
- Pour chaque patron : trois lignes contenant le nom, la catégorie et la description
- Une catégorie selon laquelle effectuer le filtrage
Après avoir ajouté tous les patrons à votre catalogue, affichez, un par ligne, les récapitulatifs des patrons correspondant à la catégorie de filtrage. Si aucun patron ne correspond, affichez No patterns found.
Par exemple, si les entrées sont :
3
Singleton
Creational
Ensures only one instance exists
Observer
Behavioral
Notifies dependents of state changes
Factory
Creational
Creates objects without specifying exact class
CreationalLa sortie devrait être :
[Creational] Singleton: Ensures only one instance exists
[Creational] Factory: Creates objects without specifying exact classCe défi montre comment organiser des classes liées dans des fichiers séparés afin de garder votre base de code propre et facile à maintenir — un principe qui devient encore plus important lorsque vous implémenterez de véritables patrons de conception dans les prochaines leçons !
Essayez vous-même
using System;
using System.Collections.Generic;
using Patterns;
class Program
{
public static void Main(string[] args)
{
// Lire le nombre de motifs
int n = Convert.ToInt32(Console.ReadLine());
// Créer un nouveau PatternCatalog
PatternCatalog catalog = new PatternCatalog();
// TODO: Lire les détails de chaque motif (name, category, description)
// et les ajouter au catalogue
for (int i = 0; i < n; i++)
{
string name = Console.ReadLine();
string category = Console.ReadLine();
string description = Console.ReadLine();
// TODO: Créer un Pattern et l'ajouter au catalogue
}
// Lire la catégorie pour filtrer
string filterCategory = Console.ReadLine();
// TODO: Obtenir les motifs par la catégorie de filtre
// et imprimer leurs résumés
// Si aucun motif ne correspond, imprimer "No patterns found"
}
}
Cette leçon comprend un petit quiz. Commencez la leçon pour y répondre et suivre votre progression.
Toutes les leçons de Programmation Orientée Objet
1Fondamentaux de la POO
Fichiers externesEspaces de noms et directivesIntro aux classes et objetsLe mot-clé 'this'Méthodes et paramètresChamps vs PropriétésConstructeursInitialiseurs d'objetsRécapitulatif - Calculatrice simple4Héritage
Syntaxe de base de l'héritage (:)Le mot-clé 'base'Mots-clés Virtual & OverrideClasses scelléesLa classe de base 'object'Récapitulatif - Hiérarchie des employés7Fonctionnalités avancées
Surcharge d'opérateursIndexeurs (this[])Redéfinition de ToString()Méthodes d'extensionRécapitulatif - Liste personnalisée10Patrons de conception - Partie 1
Introduction aux patrons de conceptionSingleton Thread-SafePatron FabriquePatron Observateur (Événements)Patron Stratégie2Propriétés et membres statiques
Propriétés auto-implémentéesPropriétés en lecture/écriture seuleChamps et méthodes statiquesClasses statiquesMembres à corps d'expression5Polymorphisme & Interfaces
Polymorphisme : Compilation vs ExécutionInterface vs Classe AbstraiteInterfaces MultiplesInterfaces ExplicitesUpcasting & DowncastingRécapitulatif - Calculateur de Formes8Concepts avancés de la POO
Composition plutôt qu'héritageGénériques (Classes et Méthodes)Délégués et ÉvénementsAttributs et RéflexionIDisposable et l'instruction usingBases de l'Injection de Dépendances11Patrons de conception, Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode TemplatePatron ÉtatPatron Composite3Architecture des classes
Données d'instance vs statiquesMots-clés 'readonly' & 'const'Champs de supportRécapitulatif - Gestionnaire de compte bancaire6Encapsulation
Modificateurs d'accèsPropriétés pour l'encapsulationImplémentation du masquage de donnéesPatterns d'immuabilitéRécapitulatif - Dossiers d'étudiants12Projet : Système de gestion de bibliothèque
Structure du projetModèles Livre et UtilisateurLogique du système d'empruntLINQ pour la rechercheInterface Console / Interface d'administrationTests unitaires (NUnit/xUnit)Entraînez-vous par vous-même : Compilateur C# en ligne