Exercices dirigés associés au patron(s) Procuration

 

Depuis Bluej, l'archive à télécharger ed_proxy_a_completer.jar (puis ouvrir non_bluej ...., selon la procédure habituelle)

(en salle d'ED 31-3-XX, utilisez enregistrez la cible sous ...)

 

Complétez toutes les procurations/mandataires, (cet ED reflète le synopsis du cours). Aidez-vous de la classe de tests Client.

Service est une interface de prise de rendez-vous (simplifiée...)

public interface Service{
  public boolean ajouterUnRendezVous(Agenda agenda, String rdv);

  public boolean supprimerUnRendezVous(Agenda agenda, String rdv); 
}

Agenda est une interface (minimaliste...)

public interface Agenda extends Iterable<String>{
 
  public boolean ajouterUnRendezVous(String rdv);
  public boolean supprimerUnRendezVous(String rdv);
  
  public boolean contientCeRDV(String rdv);
  public int nombreDeRDV();
  
}

 

 

public void testServiceParProcuration(){
  Service service = new ServiceProxy();
  assertTrue(" nombre de RDV en erreur ? ",unAgenda.nombreDeRDV() ==3);
  assertTrue(" service non rendu !, est-ce le mandataire ?",service.ajouterUnRendezVous(unAgenda,"28-Mar-2007, tp4"));
  assertTrue(" nombre de RDV en erreur ? ",unAgenda.nombreDeRDV() ==4);
}
public void testServiceDynamicProxy() throws Exception{
  ClassLoader cl = Service.class.getClassLoader();
  Service service = (Service) Proxy.newProxyInstance(cl,new Class[]{Service.class}, new DynamicEtProxy());
  assertTrue(" nombre de RDV en erreur ? ",unAgenda.nombreDeRDV() ==3);		
  assertTrue(" service non rendu !, est-ce le mandataire dynamique ?",service.ajouterUnRendezVous(unAgenda,"28-Mar-2007, tp4"));
  assertTrue(" nombre de RDV en erreur ? ",unAgenda.nombreDeRDV() ==4);			
}

Vérifiez l'usage possible de cette "décoration", (utilisation ici du patron Décorateur)

Service service = (Service) DebugProxy.newProxyInstance(new ServiceProxy());
...

Un exemple : ci-dessous la méthode supprimerUnRendezVous n'est pas autorisée

Service service = ProxyParticulier.getProxy(new ServiceImpl(), new String[]{"supprimerUnRendezVous"});

L'exception IllegalAccessException sera déclenchée si cette méthode à l'exécution est appelée

 

 

La série de tests doit être validée : classe Cient