Composite
Intention
Organiser les objets en structures
arborescentes pour représenter des
hiérarchies tout-parties.
Pour regrouper les objets, on utilise des contenants (hiérarchie d’objets) qui
demandent la plupart du temps un traitement uniforme
Une classe abstraite (Graphic) représente à la fois les objets primitifs et leur contenant.
• Méthode draw
• Méthodes partagées par tous les objets composites : accès et gestion des fils
Quand appliquer le DP Composite?
Simplifie le client.
• Les clients peuvent manipuler les structures composites et les objets individuels
uniformément.
• Les clients ne savent pas (et ne devraient pas se préoccuper de savoir) s’ils manipulent un
objet composite ou une feuille.
• Cela simplifie le code du client en évitant les tests sur la classe des objets qui forment le
composite.
• Dans certains cas, on désire ne permettre que certains types de composantes dans un
composite.
• Dans un composite, on ne peut pas utiliser le système de typage pour assurer cette
contrainte.
• Peut mener à des ambiguités par exemple si une requête percole vers
la racine
• Component
• implémentations par défaut de ces méthodes
• Leaf
• redéfinition de ces méthodes
• Par contre, toutes les opérations des noeuds intermédiaires ne sont pas
nécessairement significatives pour les feuilles,
• Par exemple les feuilles ne peuvent pas avoir de fils.
• Transparence
• déclaration à la racine de la hiérarchie, i.e. dans l’interface commune Component
• traitement uniforme des composantes
• au détriment de la sécurité car les clients peuvent invoquer des méthodes non significatives.
• Sécurité
• déclaration dans la classe Composite
toute tentative d’ajouter ou supprimer des fils à partir des feuilles sera détectée à la compilation
au détriment de la transparence car les composites et feuilles auront des interfaces différentes
• Une modification d’une composante exigera d’invalider les caches de ses parents
• Cette approche fonctionne le mieux lorsque les composantes connaissent leur parent
uk
ns1.nic.uk purdue.edu
(uk) yahoo.com
Note: Name server names are in .... ns.purdue.edu
italics, and the corresponding (purdue.edu)
domains are in parentheses. co.uk
Arrows denote name server ac.uk
entries ns0.ja.net
...
(ac.uk) * .purdue.edu
ic.ac.uk
authoritative path to lookup: qmw.ac.uk
jeans-pc.dcs.qmw.ac.uk ...
*
DNS in typical operation
a.root-servers.net
(root)
Without caching
uk
ns1.nic.uk purdue.edu
(uk) yahoo.com
.... ns.purdue.edu
(purdue.edu)
co.uk
ac.uk
ns0.ja.net
...
(ac.uk) * .purdue.edu
ic.ac.uk
qmw.ac.uk
...
IP: alpha.qmw.ac.uk
3
IP:dns0.dcs.qmw.ac.uk
*
Implémentation VIII
Qui devrait détruire les composantes?
• Ainsi les décorateurs devront supporter l’interface Component et, partant, des
opérations comme add, remove, et getChild.
• Tiles is actually an implementation of the J2EE (Java 2 Platform, Enterprise Edition) CompositeView pattern,
itself based on the Design Patterns Composite pattern.