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 :
- mettre un texte, écrit dans un Writer, tout en majuscules quelle que soit la casse initiale; (
ToUpperCaseWriter
) - mettre la première lettre de chaque phrase en majuscule; (First
ToUpperCaseWriter
) - ne laisser qu'un espace entre les mots (enlever des espaces lorsqu'il y en a plusieurs entre deux mots consécutifs); (
OnlyOneSpaceWriter
) - centrer un texte sur une ligne d'une largeur donnée; (
CenteredWriter
) - 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:
- class CodeDeBase {
- public static 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();
- }
- }
- }
class CodeDeBase {
public static 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 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:
- class Exemple1 {
- public static void main(String[] args) {
- try {
- Writer writer = new StringWriter();
- writer = new DummyWriter(writer);
- 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();
- }
- }
- }
class Exemple1 {
public static void main(String[] args) {
try {
Writer writer = new StringWriter();
writer = new DummyWriter(writer);
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();
}
}
}
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:
- class Exemple1 {
- public static void main(String[] args) {
- try {
- Writer writer = new StringWriter();
- writer = new ToUpperCaseWriter(writer);
- 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();
- }
- }
- }
class Exemple1 {
public static void main(String[] args) {
try {
Writer writer = new StringWriter();
writer = new ToUpperCaseWriter(writer);
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();
}
}
}
produise la sortie:
JE N'AIME PAS LES MAJUSCULES. MAIS EN FRANÇAIS C'EST OBLIGATOIRE.
Exemple 2
Alors que le code suivant:
- class Exemple2 {
- public static void main(String[] args) {
- try {
- Writer writer = new StringWriter();
- writer = new FirstToUpperCaseWriter(writer);
- 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();
- }
- }
- }
class Exemple2 {
public static void main(String[] args) {
try {
Writer writer = new StringWriter();
writer = new FirstToUpperCaseWriter(writer);
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 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:
- class Exemple3 {
- public static void main(String[] args) {
- 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();
- }
- }
- }
class Exemple3 {
public static void main(String[] args) {
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.