Introduction aux patrons de conception
Fait partie de la section Programmation Orientée Objet du Journey Java de Coddy — leçon 64 sur 87.
Les patrons de conception (design patterns) sont des solutions éprouvées à des problèmes courants que les développeurs rencontrent de manière répétée lors de la création de logiciels. Plutôt que de réinventer la roue à chaque fois, vous pouvez appliquer ces modèles éprouvés pour résoudre des défis de conception récurrents.
Considérez les patrons de conception comme des plans. Ils ne vous fournissent pas de code fini à copier-coller, mais ils décrivent comment structurer vos classes et vos objets pour résoudre un type de problème spécifique. Les patrons que vous apprendrez exploitent les concepts de la POO que vous maîtrisez déjà : l'héritage, les interfaces, le polymorphisme et la composition.
Les patrons de conception se divisent en trois catégories principales :
| Catégorie | Objectif | Exemples |
|---|---|---|
| Création | La manière dont les objets sont créés | Singleton, Fabrique, Monteur |
| Structure | La manière dont les objets sont assemblés | Adaptateur, Décorateur, Composite |
| Comportement | La manière dont les objets communiquent | Observateur, Stratégie, Commande |
Pourquoi apprendre les patrons de conception ? Ils vous offrent un vocabulaire commun avec d'autres développeurs — dire « utilisez une Factory ici » communique instantanément une idée complexe. Ils vous aident également à écrire un code plus flexible et plus facile à maintenir en appliquant des principes tels que « programmer vers une interface, pas vers une implémentation ».
Dans les prochaines leçons, vous implémenterez plusieurs patrons essentiels, en commençant par des patrons de création comme Singleton et Factory, puis en passant aux patrons de comportement comme Observer et Strategy.
Défi
FacileConstruisons un classificateur de modèles simple qui démontre votre compréhension des trois catégories de modèles de conception ! Vous allez créer un système qui catégorise les modèles et explique leur but, en organisant votre code sur plusieurs fichiers.
Vous allez créer trois fichiers :
Pattern.java: Créez une interface appeléePatternqui définit le contrat pour tous les modèles de conception. Votre interface doit déclarer deux méthodes :String getCategory()qui retourne la catégorie du modèle (Creational, Structural, ou Behavioral), etString getPurpose()qui retourne une description de ce que fait cette catégorie de modèles.PatternInfo.java: Créez trois classes qui implémentent votre interfacePattern, chacune représentant une catégorie de modèles de conception :CreationalPattern- doit retourner"Creational"pour la catégorie et"How objects are created"pour le but.StructuralPattern- doit retourner"Structural"pour la catégorie et"How objects are composed"pour le but.BehavioralPattern- doit retourner"Behavioral"pour la catégorie et"How objects communicate"pour le but.Main.java: Rassemblez votre classificateur de modèles ! Vous recevrez une entrée : un nom de modèle (String) qui sera l'un des suivants :"Singleton","Factory","Adapter","Decorator","Observer", ou"Strategy".En fonction de l'entrée, créez l'objet de modèle approprié :
"Singleton"et"Factory"sont des modèles Creational"Adapter"et"Decorator"sont des modèles Structural"Observer"et"Strategy"sont des modèles Behavioral
Stockez votre objet de modèle dans une variable de type
Pattern(l'interface), démontrant le principe de programmation vers une interface. Ensuite, affichez les trois lignes suivantes :Pattern: [input pattern name]Category: [category from getCategory()]Purpose: [purpose from getPurpose()]
Vous recevrez une entrée : le nom d'un modèle de conception (String).
Ce défi renforce l'idée clé de la leçon : les modèles de conception sont organisés en catégories basées sur le problème qu'ils résolvent. En utilisant une interface, vous pratiquez également le principe de « programmer vers une interface, pas vers une implémentation » - un concept central qui rend les modèles de conception si puissants !
Aide-mémoire
Les patrons de conception (design patterns) sont des solutions éprouvées à des problèmes courants dans le développement de logiciels. Ce sont des modèles qui décrivent comment structurer les classes et les objets pour résoudre des types de problèmes spécifiques.
Les patrons de conception se répartissent en trois catégories principales :
| Catégorie | Objectif | Exemples |
|---|---|---|
| Création | Comment les objets sont créés | Singleton, Factory, Builder |
| Structure | Comment les objets sont composés | Adapter, Decorator, Composite |
| Comportement | Comment les objets communiquent | Observer, Strategy, Command |
Les patrons de conception fournissent un vocabulaire commun aux développeurs et aident à écrire un code plus flexible et maintenable en appliquant des principes tels que « programmer vers une interface, pas vers une implémentation ».
Essayez vous-même
import java.util.Scanner;
class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String patternName = scanner.nextLine();
// TODO: Déclarer une variable de type Pattern (l'interface)
Pattern pattern = null;
// TODO: En fonction de patternName, créer l'objet pattern approprié :
// - "Singleton" et "Factory" sont des patrons Creational
// - "Adapter" et "Decorator" sont des patrons Structural
// - "Observer" et "Strategy" sont des patrons Behavioral
// TODO: Afficher la sortie au format suivant :
// Pattern: [input pattern name]
// Category: [category de getCategory()]
// Purpose: [purpose de getPurpose()]
}
}
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 externesIntroduction à la POOClasses vs ObjetsLe mot-clé thisMéthodesChamps (Attributs)Méthode constructeurSurcharge de constructeurRécapitulatif - Calculatrice simple4Héritage
Héritage de base (extends)Le mot-clé superRedéfinition de méthode (@Override)Chaînage de constructeursLa classe ObjectHéritage simple et multiniveauPourquoi pas d'héritage multiple de classesRécapitulatif - Hiérarchie des employés7Méthodes spéciales et classe Object
Méthode toString()equals() et hashCode()Méthode clone()compareTo() et ComparableInterface ComparatorRécapitulatif - Tri personnalisé2Modificateurs d'accès et Encapsulation
Aperçu des niveaux d'accèsMéthodes Getter et SetterMasquage d'informationsLe mot-clé finalRécapitulatif - Gestionnaire de compte bancaire5Polymorphisme
Bases de la surcharge de méthodesRedéfinition de méthodes (Run-Time)Upcasting et DowncastingL'opérateur instanceofClasses et méthodes abstraitesRécapitulatif - Calculateur de formes8Concepts avancés de la POO
Composition vs HéritageAgrégation vs CompositionClasses internes, imbriquées et anonymesEnums et méthodes d'EnumRecords (Java 16+)Classes scellées (Java 17+)11Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FabriquePatron MonteurPatron ObservateurPatron Stratégie3Propriétés de classe et membres statiques
Variables d'instance vs variables statiquesMéthodes statiquesBlocs statiquesConstantes (static final)Récapitulatif - Compteur et utilitaire6Interfaces et Classes Abstraites
Introduction aux InterfacesImplémentation d'InterfacesImplémentation d'Interfaces MultiplesDefault et Static dans les InterfacesClasses Abstraites vs InterfacesInterfaces FonctionnellesRécapitulatif - Système de Paiement9La généricité
Introduction à la généricitéClasses génériquesMéthodes génériquesParamètres de type bornésWildcards (?, extends, super)Récapitulatif - Conteneur générique12Patrons de conception, partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Template MethodPatron ÉtatPatron CompositePatron Itérateur