Composite

Catégorie

Patron structurel

Problème

Composer des objets en structures arborescentes pour représenter des hiérarchies partie-tout. Permet aux clients de traiter les objets individuels et les compositions de manière uniforme.

Solution

  • Définir une interface commune pour les objets simples (feuille) et composites (branche)
  • Les objets composites délèguent les opérations à leurs enfants
  • Les clients traitent les objets individuels et les compositions de manière uniforme via l’interface commune

Structure

  • Component : Interface pour tous les objets de la composition (y compris les feuilles et les composites)
  • Leaf : Représente les objets feuilles dans la composition ; pas d’enfants
  • Composite : Représente les objets composites ; a des enfants ; délègue à eux
  • Client : Manipule les objets via l’interface Component

Avantages clés

  • Traitement uniforme — Les clients traitent les objets individuels et les compositions de la même manière
  • Structure récursive — Représente naturellement les structures hiérarchiques/arborescentes
  • Ajout facile de nouveaux types de composants — Les nouveaux types de feuilles et composites sont faciles à ajouter

Compromis

  • Peut rendre la conception trop générale si la hiérarchie est complexe
  • Difficile à restreindre les types de composants qu’un composite peut avoir

Quand l’utiliser

  • Vous souhaitez représenter des hiérarchies partie-tout d’objets
  • Vous souhaitez que les clients puissent ignorer la différence entre les compositions d’objets et les objets individuels
  • La hiérarchie est naturellement arborescente

Exemples

  • Java
  • Spring Framework
  • Implémentations de système de fichiers (les répertoires peuvent contenir des fichiers et d’autres répertoires)
  • Django