
Envoyé par
Neckara
Si on peut utiliser le DP de façon "dangereuse et illogique" facilement sans le faire vraiment exprès, je ne vois plus trop sont intérêt.
Tout design pattern peut être mal utilisé si on perd de vue ce pour quoi il a été conçu à l'origine. Aucune disposition technique ne peut empêcher ça, tout comme pour reprendre l'analogie du dessert, aucune recette de gâteau au chocolat ne peut s'auto-contraindre à ne pas être utilisée comme base d'une quiche lorraine.
Un design pattern, c'est la description d'un problème couramment rencontré et une solution. Beaucoup trop de gens oublient la partie problème et se contentent d'appliquer n'importe quel pattern à la mode ou dont ils ont entendu parler, souvent ils choisissent le mauvais et le tordent dans tous les sens pour le faire rentrer dans leur problème, c'est ça qui est dangereux. On trouve énormément de patterns utilisés à tort et à travers dans les forums et ailleurs, indépendamment de la validité de chaque pattern pris séparément.

Envoyé par
Neckara
Disons qu'il est tout d'abord très peu intuitif pour un débutant.
Qu'est-ce qui est peu intuitif dans
InputStream is = new GZipInputStream(new FileInputStream("file.gz"));
par rapport à
1 2 3
| InputStream is = new InputStream();
is.Add(new FileInputDecorator("file.gz"));
is.Add(new GZipInputDecorator()); |
?

Envoyé par
Neckara
Je ne penses pas que ce soit une condition suffisante, car il n'y a aucun soucis de buffer si on utilise des versions des flux non-décorés.
EDIT : on se répond depuis plusieurs posts, je pense qu'il faudrait qu'on commence à repréciser de quoi on parle pour éviter toute ambiguïté (en donnant un exemple de code ou que sais-je).
Oui, peux-tu donner un exemple précis de code qui pose problème avec des flux décorés, et ne poserait pas de problème sans Décorateur ?
La feuille de route du pattern Décorateur, c'est d'avoir une gamme de modificateurs de comportement autour d'un type d'objet qui soient composables et cumulables entre eux facilement, sans que le consommateur de cet objet (le code qui va finalement appeler la méthode qui produit le comportement) soit au courant de toutes les couches qui ont été ajoutées. Donc les qualités recherchées sont :
- extensibilité
- composabilité
- abstraction
Une implémentation où des décorations conflictuelles sont ajoutées à un objet relève à mon avis d'un mauvais choix fonctionnel, pas d'une défaillance du pattern en lui-même.
Partager