:: Enseignements :: ESIPE :: E4INFO :: 2013-2014 :: Programmation Orientée Objet - Design Pattern ::
[LOGO]

Proxy


A quoi peut bien servir un intermédiaire ? La délégation transparente, la délégation intelligente.

Exercice 1 - Photo

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

  1. Nous allons utiliser les Logger du JDK. Prenez 10 minutes pour lire rapidement la javadoc
  2. Créez un objet java.util.logging.Logger et :
    • affichez un message avec le niveau LOG sur la sortie standard.
    • afficher un message de niveau FINEST. Que faut-il faire pour le voir ?
    • ajouter un FileHandler pour que les messages de log soient aussi sauvés dans un fichier "proxy.log"
  3. 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.
    Lorsque des méthodes seront appelées sur l'objet Photo renvoyé, elles devront afficher sur le logger :
    • lors de l'entrée dans une méthode le message enter method suivi du nom de la méthode,
    • 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.

Exercice 2 - Soyons 'generic'

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.

  1. Écrivez une méthode createProxy() générique et correctement typée créant un proxy générique.
  2. Modifiez votre code pour que ne soient affichées que les méthodes ayant l'annotation Log.