L3 MIME 2006 – Programmation Objets – partiel 2
Exercice 4. Factory
60min
6pts
Contexte
Une application de bureautique peut manipuler plusieurs formats de fichiers. Chaque
format de fichier est d´ecrit dans une classe distincte. Ces classes h´eritent toutes d’une
classe Document. Par exemple, le format RTF est g´er´e par une classe RtfDocument, le
format MS Word est g´er´e par une classe DocDocument. De plus, l’utilisateur peut installer
de nouvelles classes de formats en faisant des mises `a jour de l’application. Dans ce
contexte, l’application ne peut connaˆıtre de fa¸con d´efinitive tous les formats disponibles.
Se pose alors le probl`eme suivant : Comment instancier la bonne classe lors du char-
gement d’un fichier sachant que l’on connaˆıt le nom de ce dernier ?
Solution
La solution au probl`eme pr´ec´edent est d’utiliser le design pattern Factory (Usine). Ce
pattern permet fabriquer dynamiquement un objet impl´ementant une interface donn´ee en
fonction d’un ou plusieurs param`etres. Par exemple, une DocumentFactory peut fabriquer
un document du bon format si nous lui passons en param`etre le nom d’un fichier. Pour
cela, la factory d´etecte l’extension du fichier puis tente d’instancier une classe dont le nom
est construit en concat´enant l’extension du fichier `a la chaˆıne ((Format)). Par exemple, si le
nom du fichier donn´e en argument est ((unfichier.rtf)) alors la factory renvoie une instance
de classe RtfFormat (((Rtf)) +((Format))).
Question 4.1. Conception
30min
D´ecrire compl`etement le design pattern Factory `a l’aide de diagramme(s) UML. Ne
pas oublier le cas o`u le format n’est pas disponible. Cette description sera justifi´ee.
Question 4.2. Programmation
30min
Programmer, en langage Java, une factory construisant des instances de l’interface
DocumentFormat en fonction d’un chaˆıne codant le format :
DocDocument,RtfDocument,HtmlDocument, ...
Votre programme sera justifi´e.