:: Enseignements :: ESIPE :: E4INFO :: 2008-2009 :: Programmation Orientée Objet ::
[LOGO]

Proxy, State et Logger



Exercice 1 - Proxy Pattern

Voici quelques classes permettant de gérer un album de photo td4photo.zip. On cherche pour déboguer à afficher un message lorsque l'on entre ou sort d'une méthode particulière d'un objet.

  1. Créez un objet java.util.logging.Logger et afficher un message avec le niveau (Level) ALL.
    Affichez en utilisant la méthode log un message de niveau WARNING.
  2. Rappelez le principe du design pattern Proxy.
    Écrivez la méthode createPhotoProxy(Photo photo,Logger logger) dans la classe PhotoFactory qui prend un objet de type Photo et un logger et qui renvoie un objet de type Photo. Lorsqu'elle est appelée, elle doit afficher sur le logger, lors de l'entrée dans une méthode le message enter method suivi du nom de la méthode, et lors de la sortie de la méthode le message exit method suivi du nom de la méthode.
    Pour tester le proxy, changez le code de la méthode createPhoto(File file) de sorte que, si l'on crée la factory avec un logger, on utilise le proxy.
  3. On souhaite écrire un proxy générique qui affiche les messages d'entrée et de sortie quel que soit l'objet.
    Pour cela nous allons utiliser la classe java.lang.reflect.Proxy.
    Écrivez une méthode createProxy() générique et correctement typée créant un proxy générique.
  4. Modifiez votre code pour que ne soient affichées que les méthodes ayant l'annotation Log.

Exercice 2 - Prototype Pattern

Nous allons maintenant écrire un générateur de formes en utilisant les classes td4vignette.zip.
Les classes du paquetage fr.umlv.gl.td4.vignette.factory sont modifiables alors que celles de fr.umlv.gl.td4.vignette ne le sont pas.

  1. Implantez la méthode create() de la classe PrototypeVignetteFactory en utilisant le design pattern prototype.
  2. Écrivez un main permettant de créer douze carrés rouges sur fond vert avec une épaisseur de trait de 3 pixels et de les stocker dans douze fichiers PNG différents. Puis ajoutez douze carrés roses sur fond vert avec une épaisseur de trait de 3 pixels.
    Regardez pour cela la classe java.awt.geom.Rectangle2D.Double.
  3. On souhaite pouvoir modifier des propriétés de la forme lors de la création. Implantez la méthode create(Map...) de la classe PrototypeVignetteFactory.
    Pour cela, écrivez le type Properties de façon à ce que le code n'utilise ni switch ni if.

Exercice 3 - State Pattern

Nous allons maintenant réécrire notre propre logger. Téléchargez le squelette de la classe Logger td4log.zip.

  1. Complétez la classe Logger en implantant les méthodes warning(), info() et debug().
    N'implantez pas la méthode log pour l'instant.
  2. On souhaite maintenant ne pas effectuer de if mais déléguer au level le soin d'afficher ou non le message en utilisant le design pattern State. Réécrivez les méthodes warning(), info() et debug().