ExempleCh08_03a_SimpleProxyRetourTélécharger Pour le cours sur le DynamicProxy Le cas simple de l'utilisation d'un proxy pour que un modele applicatif notifie des vues pour chaque appel aux setteurs du modele App.java import java.util.*; // ------------------------------------ public class App implements AppInt { private int etat1; private String etat2; private String nomApplicatif; public App() { etat1 = 1; etat2 = "100"; nomApplicatif = "APPLICATIF CNAM"; } public void setEtat1(int v) { etat1 = v; } public void setEtat2(String v) { etat2 = v; } public int getEtat1(){return etat1;} public String getEtat2(){return etat2;} public String getNomApplicatif(){return nomApplicatif;} public void configurer(Observer observer){} public void traitement(AppInt app) { System.out.println(String.format("%-25s|%-25s","Utilisateurs","Applicatif")); System.out.println(String.format("%-25s|%-25s","","")); for(int i=0;i<4;i++) { System.out.println(String.format("%-25s|%-25s",""," setEtat1 de "+i)); app.setEtat1(i); int k=i*100; System.out.println(String.format("%-25s|%-25s",""," setEtat2 de "+k)); app.setEtat2(""+k); try{Thread.sleep(500);}catch(Exception ex){}; } } } AppInt.java import java.util.*; // ------------------------------------ public interface AppInt { public void setEtat1(int v); public void setEtat2(String v); public int getEtat1(); public String getEtat2(); public String getNomApplicatif(); public void configurer(Observer observer); public void traitement(AppInt app); } ExempleCh08_03a.java // Pour le cours sur le DynamicProxy // Le cas simple de l'utilisation d'un proxy pour que un modele applicatif notifie des vues pour chaque appel aux setteurs du modele import java.util.*; public class ExempleCh08_03a { public static void main(String[] args) { AppInt app = new ProxyApp(new App()); Utilisateur u1 = new Utilisateur("U1",app); Utilisateur u2 = new Utilisateur("U2",app); app.traitement(app); System.out.println("========================"); AppInt app2 = new App(); Utilisateur u3 = new Utilisateur("U3",app2); Utilisateur u4 = new Utilisateur("U4",app2); app2.traitement(app2); } } ObservableApp.java import java.util.*; // ------------------------------------ public class ObservableApp extends Observable { public void setChanged() // car setChanged est protected { super.setChanged(); } } ObserverApp.java import java.util.*; // ------------------------------------ public class ObserverApp implements Observer { Utilisateur util; public ObserverApp(Utilisateur util) { this.util = util; } public void update(Observable o,Object arg) { util.traitement(arg); // APPEL AU TRAITEMENT } } ProxyApp.java import java.util.*; // ------------------------------------ public class ProxyApp implements AppInt { private ObservableApp obs; private App app; public ProxyApp(App app) { this.obs = new ObservableApp(); this.app = app; } public void setEtat1(int v) { app.setEtat1(v); obs.setChanged(); obs.notifyObservers(app.getEtat1()); } public void setEtat2(String v) { app.setEtat2(v); obs.setChanged(); obs.notifyObservers(app.getEtat2()); } public int getEtat1(){return app.getEtat1();} public String getEtat2(){return app.getEtat2();} public String getNomApplicatif(){return app.getNomApplicatif();} public void configurer(Observer observer) { obs.addObserver(observer); app.configurer(observer); // Ici le traitement est vide } public void traitement(AppInt app) { this.app.traitement(this); } } Utilisateur.java import java.util.*; // ------------------------------------ public class Utilisateur { private AppInt app; private ObserverApp observer; private String ident; public Utilisateur(String ident,AppInt app) { this.app = app; this.ident = ident; observer = new ObserverApp(this); // this app.configurer(observer); } // traitement de utilisateur appelé public void traitement(Object v) { System.out.println(String.format("%-25s|%-25s",app.getNomApplicatif()+":"+ident+" "+v.toString(),"")); } } compil.bat mkdir bin del /f /s /q bin\*.class javac -d bin *.java pause run.bat cd bin java ExempleCh08_03a pause