TP - Les décorateurs

De $1

Table des matières
aucun titre

Version de 20:39, 23 Mai 2025

cette version.

Revenir à liste des archives.

Voir la version actuelle

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 quelque soit la casse initiale;
  2. mettre la première lettre de chaque phrase en majuscule;
  3. ne laisse qu'un espace entre les mots (enlève des espaces lorsqu'il y en a plusieurs entre deux mots consécutifs);
  4. centrer un texte sur une ligne d'une largeur donnée;
  5. coder un texte en appliquant le chiffre de Vigenère. 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.

Par exemple, le code suivant:

  1. try {  
  2.  Writer writer = new StringWriter();  
  3.  writer.write("je n'aime pas les majuscules. mais en français c'est obligatoire.");  
  4.  writer.close();  
  5.  System.out.println(writer);  
  6. catch (IOException e) {  
  7.  e.printStackTrace();  
  8. }  

produit la sortie:

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

Alors que le code suivant: 

  1. try {  
  2.  Writer writer = new StringWriter();  
  3.  writer = new FirstToUpperCaseWriter(writer);  
  4.  writer.write("je n'aime pas les majuscules. mais en français c'est obligatoire.");  
  5.  writer.close();  
  6.  System.out.println(writer);  
  7. catch (IOException e) {  
  8.  e.printStackTrace();  
  9. }  

produit la sortie suivante:

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

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

  1. try {  
  2.  Writer writer = new StringWriter();  
  3.  writer = new FirstToUpperCaseWriter(writer);  
  4.  writer = new CenteredWriter(writer, 10);  
  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. }  

 On obtient la sortie:

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