Le pattern décorateur n'est pas forcement un pattern utilisé de façon explicite. Pourtant il se croise très souvent car il permet très proprement de compléter le comportement d'un objet en l'encapsulant dans un autre.
Généralement le décorateur est implémenté comme suit: un type abstrait est sous-typé par differentes formes de celui-ci sauf que a ces sous types, nous souhaitons leur adjoindre un comportement non systématique (c'est a dire que ce comportement doit pouvoir être mise en oeuvre a la demande). On va alors définir un nouvel ensemble de sous type de type décorateur qui ne peuvent se construire que sur un objet de son sur-type. Ainsi en répondant au service du type dont il hérite, le décorateur réalisera son comportement en même temps qu'il appellera le comportement de l’élément qu'il contient (en qu'il décore.... héhé!!)
Ceci ce traduit ainsi en diagramme de classe:
De façon assez intéressante, on pourra constater via le décorateur qu'il est possible de limiter la combinatoire du nombre de classe a réaliser en réifiant dans chaque décorateur les comportements qu'il aurait fallu dupliquer pour chaque classe C.
Par exemple:
Avec cet exemple on comprend rapidement que lors de la création des Point2D ou Point3D, si l'on souhaite leur donner une couleur, il serait dommage de les sous typer avec deux ColoredPoint2D et ColoredPoint3D alors que le décorateur permet de factoriser cette fonctionnalité.
Pour ceux qui voudront un exemple plus détaillé, je vous invite a lire cet article et enfin pour ceux qui voudront voir une application de ce pattern dans un contexte d'utilisation des lambda expression, vous pouvez lire l'article sur la DZone.
Ou consulter ce lien http://design-patterns.fr/decorateur-en-java
Aucun commentaire:
Enregistrer un commentaire