TP - Les décorateurs

De $1

Table des matières
aucun titre

Version de 20:48, 2 Mai 2024

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 quel que 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

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:

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

produit la sortie:

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

Alors que le code suivant: 

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

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:

try {
 Writer writer = new StringWriter();
 writer = new FirstToUpperCaseWriter(writer);
 writer = new CenteredWriter(writer, 10);
 writer.write("je n'aime pas les majuscules. mais en français c'est obligatoire.");
 writer.close();
 System.out.println(writer);
} catch (IOException e) {
 e.printStackTrace();
}

 On obtient la sortie:

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