Introduction aux patrons de conception
Fait partie de la section Programmation Orientée Objet du Journey Dart de Coddy. Leçon 89 sur 110.
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, vous pouvez appliquer ces modèles établis pour résoudre des problèmes similaires de manière cohérente et maintenable.
Considérez les patrons de conception comme des recettes. Tout comme un chef n'invente pas une nouvelle façon de faire du pain à chaque fois, les programmeurs utilisent des modèles qui ont été affinés au fil des décennies. Ces patrons exploitent les concepts de la POO que vous avez déjà appris — classes, héritage, interfaces et polymorphisme — et les combinent de manières spécifiques pour résoudre des problèmes particuliers.
Les patrons de conception sont généralement regroupés en trois catégories :
| Catégorie | Objectif | Exemples |
|---|---|---|
| Création | Comment les objets sont créés | Singleton, Fabrique |
| Structure | Comment les objets sont composés | Adaptateur, Décorateur |
| Comportement | Comment les objets communiquent | Observateur, Stratégie |
Dans les prochaines leçons, tu découvriras des modèles spécifiques de chaque catégorie. Chaque modèle répond à un problème distinct : garantir qu’une seule instance d’une classe existe, créer des objets sans spécifier de classes exactes, ou permettre aux objets d’informer les autres des changements. Comprendre quand et pourquoi utiliser chaque modèle est tout aussi important que de savoir comment l’implémenter.
Défi
FacileConstruisons un système simple de résolution de problèmes qui montre comment les patrons de conception organisent le code par catégorie ! Tu vas créer une structure qui classe différents défis logiciels et suggère quel type de patron pourrait aider à les résoudre.
Tu vas organiser ton code en deux fichiers :
patterns.dart: Crée une énumération appeléePatternCategoryavec trois valeurs :creational,structuraletbehavioral. Chacune doit avoir un champString descriptionexpliquant son objectif :creational: "Handles object creation"structural: "Handles object composition"behavioral: "Handles object communication"
Problemqui représente un défi logiciel. Elle doit avoir un champString nameet un champPatternCategory category. Ajoute une méthodesuggest()qui renvoie une chaîne au format suivant :[name] -> Use a [category description] patternmain.dart: Importe ton fichier de patrons et montre comment différents problèmes correspondent à différentes catégories de patrons. Crée trois instances deProblem:- Un problème nommé
Ensure single database connectionavec la catégoriecreational - Un problème nommé
Make old API work with new systemavec la catégoriestructural - Un problème nommé
Notify users when data changesavec la catégoriebehavioral
suggest()sur chaque problème et affiche les résultats.- Un problème nommé
Ce défi t'aide à comprendre comment les patrons de conception sont catégorisés selon le type de problème qu'ils résolvent — un concept clé lorsque tu commenceras à apprendre des patrons spécifiques dans les prochaines leçons !
Sortie attendue :
Ensure single database connection -> Use a Handles object creation pattern
Make old API work with new system -> Use a Handles object composition pattern
Notify users when data changes -> Use a Handles object communication patternEssayez vous-même
import 'patterns.dart';
void main() {
// TODO: Créer trois instances de Problem :
// 1. name: "Ensure single database connection", category: creational
// 2. name: "Make old API work with new system", category: structural
// 3. name: "Notify users when data changes", category: behavioral
// TODO: Appeler suggest() sur chaque problème et afficher les résultats
}
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 externesBibliothèques et importsIntroduction à la POOClasses vs objetsLe mot-clé thisMéthodesVariables d’instanceBases des constructeursRécapitulatif - Calculatrice simple4Sécurité face aux valeurs nulles
Introduction à la sécurité face aux valeurs nullesNullable vs Non-NullableLes opérateurs ? et !Mot-clé Late et sécurité face aux valeurs nullesOpérateurs sensibles à nullSécurité face aux valeurs nulles dans les classesRécapitulatif – Système de profil utilisateur7Classes abstraites et interfaces
Classes abstraitesMéthodes abstraitesInterfaces en DartInterfaces implicitesImplémenter ou étendreInterfaces multiplesRécapitulatif - Calculateur de formes10Collections et génériques
Vue d’ensemble des List, Set et MapCollections à typage sûrClasses génériquesMéthodes génériquesContraintes génériquesIterable et IteratorRécapitulatif – stockage générique2Constructeurs en Dart
Constructeur par défautConstructeurs nommésListes d'initialisationConstructeurs constantsConstructeurs factoryConstructeurs redirigésRécapitulatif - Constructeur de formes5Encapsulation
Membres publics vs privésLa convention du préfixe _Confidentialité au niveau de la bibliothèqueApprofondissement des getters et settersMasquage de l’informationRécapitulatif - Fiches des étudiants8Mixins
Introduction aux MixinsCréer des MixinsUtiliser plusieurs MixinsMot-clé on dans les MixinsMixin ou héritageMixin ou interfaceRécapitulatif - Système animal11Méthodes spéciales
Redéfinition de toString()Redéfinition de hashCode et ==Interface ComparableMéthode call()Redéfinition de noSuchMethodRécapitulatif - Collection personnalisée14Patrons de conception, partie 1
Introduction aux patrons de conceptionPatron SingletonPatron FactoryPatron ObserverPatron Strategy3Propriétés des classes
Membres d’instance et statiquesChamps Final et ConstVariables différéesMéthodes et champs statiquesAccesseurs et mutateursRécapitulatif - Gestionnaire de compte bancaire6Héritage
Héritage de baseLe mot-clé superRedéfinition de méthodeL’annotation @overrideLe mot-clé de classe finalConstructeurs et héritageRécapitulatif – Hiérarchie des employés9Polymorphisme
Bases du polymorphismePolymorphisme via les interfacesVérification des types à l’exécutionLes opérateurs is et asMot-clé covariantRécapitulatif - Processeur de paiements12POO asynchrone
Futures et async/awaitNotions de base des StreamsContrôleurs de StreamsConstructeurs asynchronesAsynchrone dans les méthodes de classeRécapitulatif - récupérateur de données15Patrons de conception – Partie 2
Patron CommandePatron AdaptateurPatron DécorateurPatron Méthode modèlePatron ÉtatPatron CompositePatron DépôtEntraînez-vous par vous-même : Compilateur Dart en ligne