Design Patterns

 Voici une liste des principaux design patterns (patrons de conception) organisés par catégories, avec une explication de chacun d'eux.

Catégories de Design Patterns :

  1. Patrons de création (Creational Patterns)
  2. Patrons structurels (Structural Patterns)
  3. Patrons de comportement (Behavioral Patterns)

1. Patrons de création (Creational Patterns)

Ces patrons concernent l'instanciation d'objets. Ils permettent de créer des objets de manière contrôlée tout en masquant les détails complexes de l'instanciation.

a. Singleton

Le pattern Singleton garantit qu'une classe n'ait qu'une seule instance et fournit un point d'accès global à cette instance.

  • Utilisation : Quand une seule instance d'une classe doit être accessible dans tout le système (ex : gestionnaire de connexion à la base de données).
  • Exemple : Un gestionnaire de fichiers ou une classe qui gère une configuration unique.

b. Factory Method

Le Factory Method fournit une interface pour créer des objets dans une superclasse, mais laisse le choix des sous-classes concrètes aux classes dérivées.

  • Utilisation : Quand on souhaite déléguer la création des objets aux sous-classes sans exposer la logique de création dans la classe principale.
  • Exemple : Système de notifications qui peut envoyer des emails, des SMS ou des messages push selon l'implémentation concrète.

c. Abstract Factory

L'Abstract Factory fournit une interface pour créer des familles d'objets reliés ou dépendants sans spécifier leurs classes concrètes.

  • Utilisation : Quand on veut créer des familles d'objets (ex : boutons et fenêtres pour des interfaces GUI multiplateformes).
  • Exemple : Un GUI Toolkit qui peut créer des boutons et des fenêtres adaptés à Windows ou à macOS.

d. Builder

Le pattern Builder permet de construire un objet complexe en séparant la construction de l’objet de sa représentation. Il permet aussi d’instancier un objet étape par étape.

  • Utilisation : Quand l'objet à construire nécessite plusieurs étapes de création ou des paramètres complexes (ex : un objet Car avec des composants facultatifs).
  • Exemple : Création d'un formulaire complexe avec plusieurs options.

e. Prototype

Le Prototype permet de créer de nouveaux objets en clonant un objet existant au lieu de créer des instances à partir de zéro.

  • Utilisation : Quand la création d'un nouvel objet est coûteuse et que l'on peut cloner un objet existant pour réduire la charge.
  • Exemple : Clonage d'objets de jeux vidéo comme des ennemis ou des obstacles.

2. Patrons structurels (Structural Patterns)

Ces patrons traitent de la composition des classes et des objets. Ils permettent d'organiser les relations entre les objets afin de former des structures plus grandes.

a. Adapter

Le pattern Adapter permet de rendre compatibles deux interfaces incompatibles en les enveloppant dans une interface existante.

  • Utilisation : Quand vous devez utiliser une classe existante mais que son interface n’est pas compatible avec le reste du système.
  • Exemple : Utiliser une ancienne API dans un nouveau système qui requiert une interface différente.

b. Bridge

Le pattern Bridge permet de séparer une abstraction d'une implémentation afin qu'elles puissent évoluer indépendamment l'une de l'autre.

  • Utilisation : Quand vous avez plusieurs dimensions de variation dans un système que vous souhaitez gérer séparément (ex : un système de forme géométrique où les formes et leurs représentations sont découplées).
  • Exemple : Différentes formes graphiques (cercle, carré) avec différentes implémentations (rendu en 2D ou en 3D).

c. Composite

Le pattern Composite permet de composer des objets en arborescence pour représenter des hiérarchies partie-tout, où les objets individuels et les compositions d’objets sont traités de manière uniforme.

  • Utilisation : Quand vous souhaitez traiter de manière identique des objets simples et des compositions d’objets.
  • Exemple : Système de fichiers où les fichiers et dossiers sont traités de la même manière (chaque dossier peut contenir d'autres dossiers ou fichiers).

d. Decorator

Le pattern Decorator permet d'ajouter dynamiquement des fonctionnalités à un objet sans modifier son code source ou utiliser de sous-classes.

  • Utilisation : Quand vous avez besoin d’ajouter des fonctionnalités à un objet de manière flexible et dynamique.
  • Exemple : Ajouter des fonctionnalités supplémentaires à une fenêtre (ex : barre de défilement, bordure, etc.).

e. Facade

Le pattern Facade fournit une interface simplifiée à un ensemble complexe de classes ou à un sous-système.

  • Utilisation : Quand vous voulez offrir une interface plus simple ou unifiée pour interagir avec des systèmes complexes.
  • Exemple : Un système bancaire avec une API simplifiée pour les opérations courantes comme les virements, les retraits, etc.

f. Flyweight

Le pattern Flyweight permet de réduire le coût de création d’un grand nombre d’objets similaires en partageant le plus de données possible entre eux.

  • Utilisation : Quand vous avez un grand nombre d'objets qui partagent un état similaire ou identique.
  • Exemple : Un système de gestion de texte où chaque lettre est un objet partagé et seul l’emplacement change.

g. Proxy

Le pattern Proxy fournit un objet substitut ou un proxy pour contrôler l'accès à un autre objet, offrant ainsi un niveau d'indirection supplémentaire.

  • Utilisation : Quand vous avez besoin de contrôler l'accès à un objet, par exemple pour le chargement différé ou la protection.
  • Exemple : Un proxy de connexion à une base de données pour gérer les accès ou les autorisations.

3. Patrons de comportement (Behavioral Patterns)

Ces patrons concernent l'interaction et la responsabilité entre les objets. Ils définissent comment les objets collaborent entre eux.

a. Chain of Responsibility

Le Chain of Responsibility permet de transmettre une requête le long d'une chaîne d'objets qui peuvent traiter la requête ou la passer au suivant dans la chaîne.

  • Utilisation : Quand vous avez plusieurs objets pouvant gérer une requête et que vous voulez éviter de coupler le demandeur à un gestionnaire spécifique.
  • Exemple : Un système de traitement de requêtes HTTP, où chaque middleware traite ou passe la requête.

b. Command

Le pattern Command encapsule une requête sous forme d'objet, permettant de paramétrer des actions à exécuter plus tard, d'annuler des actions, etc.

  • Utilisation : Quand vous souhaitez encapsuler des actions et les traiter de manière générique (ex : annulation ou répétition d’actions).
  • Exemple : Un gestionnaire d'interface utilisateur qui peut annuler et refaire des actions comme copier-coller.

c. Interpreter

L'Interpreter permet d'évaluer des phrases ou des expressions dans un langage en définissant une grammaire et un interpréteur pour ce langage.

  • Utilisation : Quand vous avez besoin de définir la grammaire et l'évaluation d'un langage simple.
  • Exemple : Évaluation d'expressions mathématiques ou de commandes de script.

d. Iterator

Le pattern Iterator fournit un moyen d'accéder à une collection d'objets de manière séquentielle sans exposer sa représentation interne.

  • Utilisation : Quand vous voulez traverser une collection d’objets de manière uniforme sans exposer sa structure interne.
  • Exemple : Parcourir une liste ou une arborescence d'objets (ex : une liste chaînée).

e. Mediator

Le Mediator définit un objet qui contrôle les interactions entre plusieurs objets, les rendant moins dépendants les uns des autres.

  • Utilisation : Quand vous voulez simplifier les communications entre objets en centralisant les interactions dans un médiateur.
  • Exemple : Un système de chat où un serveur central gère toutes les interactions entre les utilisateurs.

f. Memento

Le Memento permet de capturer et de restaurer l'état interne d'un objet sans violer son encapsulation.

  • Utilisation : Quand vous souhaitez implémenter un système de sauvegarde et de restauration d’états (ex : annuler des actions).
  • Exemple : Une application de traitement de texte avec des fonctionnalités d’annulation/rétablissement.

g. Observer

Le pattern Observer définit une relation de dépendance entre objets de sorte qu'un changement dans un objet entraîne une notification automatique à ses dépendants.

  • Utilisation : Quand un changement dans un objet nécessite de notifier plusieurs autres objets.
  • Exemple : Un système de gestion d’événements où plusieurs composants doivent être informés de changements.

h. State

Le pattern State permet à un objet de changer son comportement en fonction de son état interne, en déléguant le comportement à des objets représentant les différents états.

  • Utilisation : Quand un objet doit changer son comportement selon son état sans changer de classe.
  • Exemple : Un automate de billetterie qui change de comportement selon qu'il est en attente d'argent ou de validation de billet.

i. Strategy

Le pattern Strategy permet de définir une famille d'algorithmes et de les encapsuler de manière interchangeable,

Plus récente Plus ancienne

نموذج الاتصال