Le patron décorateur

De $1

Table des matières
  1. 1. Enoncé
  2. 2. Exemple 1
  3. 3. Exemple 2
  4. 4. Exemple 3

Version de 14:54, 2 Mai 2024

cette version.

Revenir à liste des archives.

Voir la version actuelle

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 quelque 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 (enlèver 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.

Exemple 1

Par exemple, le code suivant:

class Exercice1{
 public void main(String[] args) {
  try {
   Writer writer = new StringWriter();
   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();
  }
 }
}

produit la sortie:

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

Exemple 2

Alors que le code suivant: 

{{ syntax.Java{code: "class Exercice2{\n public void main(String[] args) {\n  try {\n   Writer writer = new StringWriter();\n   writer = new FirstToUpperCaseWriter(writer);\n   writer.write(\"je n'aime pas les majuscules. mais en français c'est obligatoire.\");\n   writer.close();\n   System.out.println(writer);\n  } catch (IOException e) {\n   e.printStackTrace();\n  }\n }\n}"} }}

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:

{{ syntax.Java{code: "class Exercice3{\n public void main(String[] args) {\n  try {\n   Writer writer = new StringWriter();\n   writer = new FirstToUpperCaseWriter(writer);\n   writer = new CenteredWriter(writer, 10);\n   writer.write(\"je n'aime pas les majuscules. mais en français c'est obligatoire.\");\n   writer.close();\n   System.out.println(writer);\n  } catch (IOException e) {\n   e.printStackTrace();\n  }\n }\n}"} }}

 On obtient la sortie:

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