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