Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
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.