Frédéric Mallet > Patrons de conception > Le patron décorateur

Le patron décorateur

De $1

Table des matières
  1. 1. Enoncé
  2. 2. Code de base
  3. 3. Exemple 0
  4. 4. Exemple 1
  5. 5. Exemple 2
  6. 6. Exemple 3

Enoncé

Sur le modèle des transparents 13 et 14 du cours construire des décorateurs qui décorent des objets de type Writer pour :

  1. mettre un texte, écrit dans un Writer, tout en majuscules quelle que soit la casse initiale; (ToUpperCaseWriter)
  2. mettre la première lettre de chaque phrase en majuscule; (FirstToUpperCaseWriter)
  3. ne laisser qu'un espace entre les mots (enlever des espaces lorsqu'il y en a plusieurs entre deux mots consécutifs); (OnlyOneSpaceWriter)
  4. centrer un texte sur une ligne d'une largeur donnée; (CenteredWriter)
  5. coder un texte en appliquant le chiffre de Vigenère. (VigenereWriter) Comment faire pour décoder ? 

On veut avoir un décorateur pour chacun des cas énumérés ci-dessus.

On veut également pouvoir combiner deux décorateurs.

Code de base

Par exemple, le code suivant:

  1. class CodeDeBase {  
  2.   public static void main(String[] args) {  
  3.     try {  
  4.       Writer writer = new StringWriter();  
  5.       writer.write("je n'aime pas les majuscules. mais en français c'est obligatoire.");  
  6.       writer.close();  
  7.       System.out.println(writer);  
  8.     } catch (IOException e) {  
  9.       e.printStackTrace();  
  10.     }  
  11.   }  
  12. }  

produit la sortie:

je n'aime pas les majuscules. mais en français c'est obligatoire.

Exemple 0

Avant de commencer, réaliser un décorateur trivial DummyWriter qui réalise le patron décorateur, sans ajouter de fonctionnalité  de telle sorte que le code suivant:

  1. class Exemple1 {  
  2.   public static void main(String[] args) {  
  3.     try {  
  4.       Writer writer = new StringWriter();  
  5.       writer = new DummyWriter(writer);  
  6.       writer.write("je n'aime pas les majuscules. mais en français c'est obligatoire.");  
  7.       writer.close();  
  8.       System.out.println(writer);  
  9.     } catch (IOException e) {  
  10.       e.printStackTrace();  
  11.     }  
  12.   }  
  13. }  

produise la sortie:

je n'aime pas les majuscules. mais en français c'est obligatoire.

Exemple 1

Si vous avez répondu à la première question, vous avez construit la classe ToUpperCaseWriter de telle sorte que le code suivant:

  1. class Exemple1 {  
  2.   public static void main(String[] args) {  
  3.     try {  
  4.       Writer writer = new StringWriter();  
  5.       writer = new ToUpperCaseWriter(writer);  
  6.       writer.write("je n'aime pas les majuscules. mais en français c'est obligatoire.");  
  7.       writer.close();  
  8.       System.out.println(writer);  
  9.     } catch (IOException e) {  
  10.       e.printStackTrace();  
  11.     }  
  12.   }  
  13. }  

produise la sortie:

JE N'AIME PAS LES MAJUSCULES. MAIS EN FRANÇAIS C'EST OBLIGATOIRE.

Exemple 2

Alors que le code suivant: 

  1. class Exemple2 {  
  2.   public static void main(String[] args) {  
  3.     try {  
  4.       Writer writer = new StringWriter();  
  5.       writer = new FirstToUpperCaseWriter(writer);  
  6.       writer.write("je n'aime pas les majuscules. mais en français c'est obligatoire.");  
  7.       writer.close();  
  8.       System.out.println(writer);  
  9.     } catch (IOException e) {  
  10.       e.printStackTrace();  
  11.     }  
  12.   }  
  13. }  
 

produit la sortie suivante:
Je n'aime pas les majuscules. Mais en français c'est obligatoire.

Exemple 3

En combinant deux décorateurs de la façon suivante:

  1. class Exemple3 {  
  2.   public static void main(String[] args) {  
  3.     try {  
  4.       Writer writer = new StringWriter();  
  5.       writer = new FirstToUpperCaseWriter(writer);  
  6.       writer = new CenteredWriter(writer, 10);  
  7.       writer.write("je n'aime pas les majuscules. mais en français c'est obligatoire.");  
  8.       writer.close();  
  9.       System.out.println(writer);  
  10.     } catch (IOException e) {  
  11.       e.printStackTrace();  
  12.     }  
  13.   }  
  14. }  

 On obtient la sortie:

Je n'aime
 pas les
majuscules
. Mais en
 français
  c'est
obligatoir
    e.

 

Mots clés:
 
Images (0)
 
Commentaires (0)
Vous devez être connecté pour poster un commentaire.