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 sont des solutions éprouvées aux 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, vous pouvez appliquer ces modèles éprouvés pour résoudre des problèmes de conception récurrents.
Considérez les patrons de conception comme des plans. Ils ne vous fournissent pas de code fini à copier-coller, mais décrivent comment structurer vos classes et vos objets pour résoudre un type spécifique de problème. Les patrons que vous allez apprendre s’appuient sur les concepts de la POO que vous maîtrisez déjà : héritage, interfaces, polymorphisme et composition.
Les patrons de conception se répartissent en trois grandes catégories :
| Catégorie | Objectif | Exemples |
|---|---|---|
| Creational | Comment les objets sont créés | Singleton, Factory, Builder |
| Structural | Comment les objets sont composés | Adapter, Decorator, Composite |
| Behavioral | Comment les objets communiquent | Observer, Strategy, Command |
Pourquoi apprendre les patrons de conception ? Ils vous donnent un vocabulaire commun avec les 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 « programmez contre une interface, pas contre une implémentation ».
Dans les prochaines leçons, tu implémenteras plusieurs modèles essentiels, en commençant par des modèles de création comme Singleton et Factory, puis en passant à des modèles comportementaux comme Observer et Strategy.
Défi
FacileConstruisons un classificateur simple de motifs qui démontre ta compréhension des trois catégories de motifs de conception ! Tu vas créer un système qui classe les motifs et explique leur objectif, en organisant ton code sur plusieurs fichiers.
Tu vas créer trois fichiers :
Pattern.java: crée une interface appeléePatternqui définit le contrat pour tous les motifs de conception. Ton interface doit déclarer deux méthodes :String getCategory(), qui renvoie la catégorie du motif (Creational, Structural ou Behavioral), etString getPurpose(), qui renvoie une description de ce que fait cette catégorie de motifs.PatternInfo.java: crée trois classes qui implémentent ton interfacePattern, chacune représentant une catégorie de motifs de conception :CreationalPattern- doit renvoyer"Creational"pour la catégorie et"How objects are created"pour l'objectif.StructuralPattern- doit renvoyer"Structural"pour la catégorie et"How objects are composed"pour l'objectif.BehavioralPattern- doit renvoyer"Behavioral"pour la catégorie et"How objects communicate"pour l'objectif.Main.java: rassemble ton classificateur de motifs ! Tu recevras une entrée : le nom d'un motif (String), qui sera l'un des suivants :"Singleton","Factory","Adapter","Decorator","Observer"ou"Strategy".En fonction de l'entrée, crée l'objet motif approprié :
"Singleton"et"Factory"sont des motifs Creational"Adapter"et"Decorator"sont des motifs Structural"Observer"et"Strategy"sont des motifs Behavioral
Stocke ton objet motif dans une variable de type
Pattern(l'interface), afin de démontrer le principe de la programmation envers une interface. Affiche ensuite les trois lignes suivantes :Pattern: [input pattern name]Category: [category from getCategory()]Purpose: [purpose from getPurpose()]
Tu recevras une entrée : le nom d'un motif de conception (String).
Ce défi renforce l'idée clé de la leçon : les motifs de conception sont organisés en catégories selon le problème qu'ils résolvent. En utilisant une interface, tu pratiques également le principe « programmer envers une interface, et non une implémentation » — un concept essentiel qui rend les motifs de conception si puissants !
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éclarez une variable de type Pattern (l'interface)
Pattern pattern = null;
// TODO: En fonction de patternName, créez l'objet pattern approprié :
// - "Singleton" et "Factory" sont des patterns Créationnels
// - "Adapter" et "Decorator" sont des patterns Structurels
// - "Observer" et "Strategy" sont des patterns Comportementaux
// TODO: Affichez la sortie au format suivant :
// Pattern: [nom du pattern en entrée]
// Category: [catégorie de getCategory()]
// Purpose: [objectif 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érateurEntraînez-vous par vous-même : Compilateur Java en ligne