Description:
Le but du pattern Decorator est d'ajouter dynamiquement des fonctions supplémentaires à un objet. Cet ajout de fonctionnalités ne modifie pas l'interface de l'objet et reste transparent vis-à-vis des clients.
Le pattern Decorator constitue une alternative par rapport à la création d'une sous-classe pour enrichir un objet.
Exemple:
Dans un système qui offre des fonctions par catégories de produits, à un client,si nous voulons offrir des fonctionnalités supplémentaires pour une catégorie de produits nous pouvons rajouter une sous-classe spécifique, si on veut rajouter d'autres fonctionnalités une autre catégorie de produit idem nous pourrions rajouter une sur-classe ce qui devient vite complexe. Il est aisé de comprendre que l'utilisation de l'héritage n'est pas adapté à ce qui est demandé pour deux raisons :
- L'héritage est un outil trop puissant pour réaliser un tel ajout de fonctionnalité.
- L'héritage est un mécanisme statique.
Le pattern Decorator propose une autre approche qui consiste à ajouter un nouvel objet appelé décorateur qui se substitue à l'objet initial et qui le référence. Ce décorateur possède la même interface ce qui rend la substitution transparente vis-à-vis des clients.
But:
Le but du pattern Decorator est d'ajouter dynamiquement des fonctions supplémentaires à un objet. Cet ajout de fonctionnalités ne modifie pas l'interface de l'objet et reste transparent vis-à-vis des clients.
Solution:
Le pattern Decorator propose une autre approche qui consiste à ajouter un nouvel objet appelé décorateur qui se substitue à l'objet initial et qui le référence.
Avantages:
On évite d'utiliser des mécanismes statiques.
On garde des objets basiques très simple.
Diagramme de classes:
Structure générique du pattern Decorator
Diagramme des séquences représentant une seule fonctionnalité rajouté
Diagramme des séquences représentant deux fonctionnalités rajoutées
Participants:
ComposantAbstrait est l'interface commune au composant et aux décorateur;
ComposantConcret est l'objet intial auquel de nouvelles fonctionnalités doivent être ajoutées;
Decorateur est une classe abstaite qui détient une référence vers un composant;
DecorateurConcretA et DecorateurConcretB sont des sous-classes concrètes de Decorateur qui ont pour but l'implantation des fonctionnalités ajoutées au composant.
Collaborations:
Le décorateur se substitue au composant. Lorsqu'il reçoit un message destiné à ce dernier, il le redirige au composant en effectuant des opérations préalables ou postérieures à cette redirection.
Domaines d'utilisation:
- Un système ajoute dynamiquement des fonctionnalités à un objet, sans modifier son interface, c'est à dire sans que les clients de cet objet doivent être modifiés.
- Un système gère des fonctionnalités qui peuvent être retirées dynamiquement.
- L'utilisation de l'héritage pour étendre des objets n'est pas pratique, ce qui peut arriver quand leur hiérarchie est déjà complexe.
Aucun commentaire:
Enregistrer un commentaire