Pattern decorator
trailer91230
Messages postés
134
Date d'inscription
Statut
Membre
Dernière intervention
-
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
KX Messages postés 16761 Date d'inscription Statut Modérateur Dernière intervention -
Bonjour,
Je débute en Java à l'aide du site OpenClassrooms, et j'arrive à un moment où je bloque sur une notion qu'est le pattern strategy decorator.
Voilà le code :
Je pense avoir compris l'ensemble du code là où je bloque par contre c'est au niveau de la classe Couche, dans la méthode préparer(), je ne comprends pas la nécessité de de re-envoyer : String str = pat.preparer();
Quand je la supprime, ça se bloque à "Je suis une couche de chocolatee" donc je comprends par là qu'elle sert à remonter l'ensemble de Classe, mais je n'arrive pas à comprendre la logique de la chose, ce qui se passe concrètement en re-envoyant cette méthode...
Voilà j'espère que je me suis bien exprimé ^^
Cordialement.
Je débute en Java à l'aide du site OpenClassrooms, et j'arrive à un moment où je bloque sur une notion qu'est le pattern strategy decorator.
Voilà le code :
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. \n"; } }
public abstract class Couche extends Patisserie{ protected Patisserie pat; protected String nom; public Couche(Patisserie p){ pat = p; } public String preparer() { String str = pat.preparer(); return str + nom; } }
public class CoucheChocolat extends Couche{ public CoucheChocolat(Patisserie p) { super(p); this.nom = "\t- Une couche de chocolat.\n"; } }
public class CoucheBiscuit extends Couche { public CoucheBiscuit(Patisserie p) { super(p); this.nom = "\t- Une couche de biscuit.\n"; } }
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()); } }
Je pense avoir compris l'ensemble du code là où je bloque par contre c'est au niveau de la classe Couche, dans la méthode préparer(), je ne comprends pas la nécessité de de re-envoyer : String str = pat.preparer();
Quand je la supprime, ça se bloque à "Je suis une couche de chocolatee" donc je comprends par là qu'elle sert à remonter l'ensemble de Classe, mais je n'arrive pas à comprendre la logique de la chose, ce qui se passe concrètement en re-envoyant cette méthode...
Voilà j'espère que je me suis bien exprimé ^^
Cordialement.
A voir également:
- Pattern decorator
- AKVIS Decorator - Télécharger - Trucages & Effets
- Forgot pattern - Guide
- Java Pattern Regex : tout sauf une chaine - Forum Java
1 réponse
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()); } }