Pattern decorator
Fermé
trailer91230
Messages postés
134
Date d'inscription
jeudi 5 août 2010
Statut
Membre
Dernière intervention
20 mai 2016
-
Modifié par KX le 22/05/2015 à 14:39
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 22 mai 2015 à 15:04
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 22 mai 2015 à 15:04
A voir également:
- Pattern decorator
- Forgot pattern - Guide
- AKVIS Decorator - Télécharger - Trucages & Effets
- Dark pattern - Guide
- Fl studio copier coller pattern - Forum Audio
- Lucky patcher patch pattern failed - Forum Téléphones & tablettes Android
1 réponse
KX
Messages postés
16753
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
25 novembre 2024
3 019
22 mai 2015 à 15:04
22 mai 2015 à 15:04
Bonjour,
Je ne suis pas convaincu du réel intérêt de ce design pattern, sauf dans des cas très spécifique, d'ailleurs l'exemple choisi me parait mal adapté, Couche extends Patisserie c'est un peu maladroit comme conception...
"je ne comprends pas la nécessité de de re-envoyer : String str = pat.preparer();"
Tout l'intérêt est là, c'est de pouvoir être cumulatif.
Mais il y a une alternative - meilleur à mon sens - c'est de ne pas surcharger le String nom, mais plutôt l'intégrer directement dans la méthode preparer.
Quitte à avoir éventuellement des classes "de raccourci" :
Je ne suis pas convaincu du réel intérêt de ce design pattern, sauf dans des cas très spécifique, d'ailleurs l'exemple choisi me parait mal adapté, Couche extends Patisserie c'est un peu maladroit comme conception...
"je ne comprends pas la nécessité de de re-envoyer : String str = pat.preparer();"
Tout l'intérêt est là, c'est de pouvoir être cumulatif.
Mais il y a une alternative - meilleur à mon sens - c'est de ne pas surcharger le String nom, mais plutôt l'intégrer directement dans la méthode preparer.
public abstract class Patisserie { public abstract String preparer(); }
public class Gateau extends Patisserie { public String preparer() { return "Je suis un gâteau et je suis constitué des éléments suivants :"; } }
public class Couche extends Patisserie { private final Patisserie pat; private final String nom; public Couche(Patisserie p, String nom) { pat = p; this.nom = nom; } @Override public String preparer() { return pat.preparer() + "\n\t- " + nom; } }
public class Main { public static void main(String[] args) { Patisserie pat = new Couche(new Couche(new Couche(new Couche( new Gateau(), "chocolat"), "biscuit"), "caramel"), "chocolat"); System.out.println(pat.preparer()); } }
Quitte à avoir éventuellement des classes "de raccourci" :
public class CoucheChocolat extends Couche { public CoucheChocolat(Patisserie p) { super(p, "chocolat"); } }
public class Main { public static void main(String[] args) { Patisserie pat = new CoucheChocolat(new CoucheCaramel( new CoucheBiscuit(new CoucheChocolat(new Gateau())))); System.out.println(pat.preparer()); } }