Up one level   |   Home/Accueil   \   Supports de cours


ISIA logo (3KB)Links to a different web site

Cours d'introduction aux Design Patterns


Mars 2003

Supports de cours

Travaux Pratiques

Sujet de Thierry KormannLinks to a different web site

Observer / Listener

En vous inspirant du Design Pattern des listeners du package java.awt.event, nous allons implémenter un système de notifications pour les différents champs de la classe Person.

Une personne est caractérisée par les champs suivants :

String firstname le nom de la personne
String lastname le prénom de la personne
int age son âge
char gender son sexe ('M' ou 'F')

La classe Person devra proposer un mécanisme de registration analogue à java.awt.Component pour les java.awt.event.MouseListener. Elle sera donc observable. A chaque fois qu'un champ de cette classe sera modifié, elle devra notifier ses listeners (ou observers).

  1. Implémenter la classe Person.
  2. Implémenter l'API pour rendre une personne observable. Le listener pourra s'appeller PersonListener par exemple.
  3. Implémenter une classe qui symbolise le changement d'état pour une personne. La classe pourra s'appeler PersonEvent.
  4. Implémenter un exemple d'observer qui affiche tous les changements d'états.
  5. L'encodage du sexe de la personne par un caractère ne tient pas la route (on ne peut empêcher statiquement de mettre un autre caractère) ; que proposez-vous de politiquement correct (i.e. pas une solution asymétrique avec un booléen is_male ou is_female) ?

Factory

Implémenter une interface PersonFactory et une implémentation de cette interface (la classe DefaultPersonFactory) qui prend un fichier de Properties ayant la syntaxe suivante :
thierry.kormann: Thierry, Kormann, 26, M
benoit.mahe: Benoit, MahXML error 9-Invalid character at line 100 column 7