Design Pattern : Décorateur

April 2, 2015

star-wars-decorateur-pattern 

Dans cet article je vais vous présenter un design pattern qui est le décorateur.

Le pattern Décorateur (Decorator) attache dynamiquement de nouvelles fonctionnalité a un objet. Il fournit une alternative souple à l’héritage, pour étendre des fonctionnalités.

Souvent en programmation orienté objet pour ajouter de nouvelles fonctionnalité on utilise l’héritage, pourtant dans certain cas l’héritage purement et simplement n’entraîne qu’une augmentation de la complexité sans avoir de réel intérêt (explosion de classes, diagramme rigide et méthodes de la classe de base inappropriées dans certaines classes dérivées…).  Il serait bien plus simple d’ajouter les nouvelles fonctionnalité a l’exécution.

Mise en place du design pattern :

Introduction

Le pattern décorateur est relativement simple : le décorateur est une classe héritant de la classe a décorer et contient une instance de l’objet qu’il décore. Ainsi l’on peut décorer de manière récursive. Prenons par exemple l’image ci-dessus, l’on a deux vaisseaux. L’un est l’objet décoré (le chasseur jedi) tandis que l’autre est le décorateur ( désolé je ne connais pas le nom de cette partie), les deux sont des vaisseaux mais le second rajoute au premier la possibilité d’aller plus vite encore. De manière plus schématique l’on se retrouve dans le cas suivant :

decorator-pattern-schemas

Maintenant voici un petit diagramme uml qui présente un peu plus ce design pattern avant de passer a du code.

decorateur-uml

On voit bien que notre décorateur hérite du composant a décorer, contient une instance sur un composant.

 Implémentation

Maintenant un peu de code simple pour comprendre comment utiliser ce design pattern.

On a donc une classe Ship abstraite, une classe pour les vaisseaux jedi (JediShip) et une classe pour notre accélérateur (Accelerator). Les deux dernières hérite de Ship et peuvent donc etre considéré comme telle (ceci permet d’ajouter des décorateurs de manière récursive).  Enfin dans le fichier Warehouse nous avons une utilisation simple de ce design pattern.

Le pattern Décorateur basé sur l’héritage et la composition est facile à mettre place. Il permet de concevoir une application évolutive ou l’ajout et la modification de fonctionnalités ne posera pas de problème.  Toutefois l’on instancie beaucoup d’objet (un a chaque new),  de ce fait l’utilisation d’une Factory peut être un bon point avec ce design pattern.

Conclusion

C’est tout pour ce design pattern, en espérant avoir été assez précis. Quel design pattern voudriez vous voir dans un prochain article ?

comments powered by Disqus