Exercice : Protection Proxy

Code source de l'énoncé
  1. Compilez le code de l'énoncé. Exécutez le avec les différentes valeurs possibles d'argument (ROOT, ADMIN, USER).
    Vous pouvez constater que la classe Sensible n'est pas du tout protégée.
  2. Implémentez la classe Proxy permettant de filtrer les utilisations de Sensible.
    Dans main(), remplacez
    Sensible sensible = new Sensible();
    
    par :
    Proxy sensible = new Proxy();
    
    Les appels avec les différentes valeurs de l'argument doivent donner :
    java TestProtectionProxy ROOT
    
    rootMethod called with role ROOT
    adminMethod called with role ROOT
    userMethod called with role ROOT
    
    java TestProtectionProxy ADMIN
    
    rootMethod : Acces denied
    adminMethod called with role ADMIN
    userMethod called with role ADMIN
    
    java TestProtectionProxy USER
    
    rootMethod : Acces denied
    adminMethod : Acces denied
    userMethod called with role USER
    
  3. Dans le code précédent, l'utilisation de Proxy permet effectivement de protéger l'accès à la classe Sensible.
    Complétez le code en introduisant une interface ISensible de manière à fournir une implémentation fidèle du pattern.
    Et remplacez dans le code
    Proxy sensible = new Proxy();
    
    par
    ISensible sensible = new Proxy();
    
  4. (Dépasse le cadre du pattern)
    L'implémentation précédente permet toujours d'écrire du code appelant directement la classe Sensible.
    Comment pourrait-on bloquer toute utilisation directe de cette classe ?