/ * Modèle Agent
*
* Vie:
* (1) ne convient pas de faire leurs propres choses, par exemple: aller à l' étranger pour trouver des locataires d'achat pour acheter une maison, et ainsi de suite ...
* 1, le mode proxy
* (1) Thème Interface: Nécessite la classe proxy avec le ustensiles de classe d'agent de la même interface, par exemple: l'interface DAO
* (2) le courtier
* (3) courtier
* doit avoir une référence dans le courtier
*
* 2, le mode proxy statique
* inconvénients: une classe proxy pour seulement thèmes intérimaires (interfaces) le travail intérimaire
*
* 3, le mode proxy dynamique
* avantages: un travail d'agence de traitement, peut travailler pour l' agence multiples sujets agents, le travail intérimaire ne peut être contenu que.
* Nécessite:
* (1) la préparation d'un processeur de classe de travail d' agent, cette classe doit implémenter un InvocationHandler d'interface
* (2) avec le JDK fournit une classe de proxy pour créer une classe de proxy de l' objet
* (3) appeler la méthode
Exemple: statique Proxy
l' interface A {
de void run ();
}
classe B implémente un {
@Override
public void run () {
for (int i = 0; i <1000; i ++) {
System.out.println (i);
}
}
}
classe A StaticProxy implémente {
privé A a;
StaticProxy publique (A a) {
this.a = a;
}
@Override
RUN void {() publique
System.out.println ( "méthode RUN"); exécute
long Start = System.currentTimeMillis ();
a.run ();
extrémité longue = System.currentTimeMillis ();
System.out.println ( "temps d'exécution:" + (fin - Start));
System.out.println ( "méthode RUN a terminé son exécution");
}
}
l'utilisation de l'agent statique :. New StaticProxy (nouveau B ()) run ()
Exemple: Dynamic Proxy
Interface C {
de void run ();
}
C {CImpl les outils classe
@Override
RUN public void () {
System.out.println ( "Interface RUN mise en œuvre Méthode C");
}
}
de la classe DynamicProxy InvocationHandler {
// l'objet proxy
privé Object obj;
DynamicProxy public (Object obj) {
this.obj = obj;
}
/ *
Paramètre * A: la classe proxy d'objet
* Paramètres II: La méthode à exécuter par le courtier
* trois paramètres: la méthode est courtier pour exécuter la liste d'arguments requis
* Cette méthode est un programme appelé, est la méthode est appelée automatiquement lorsqu'un objet sera exécuté classe proxy
* /
@Override
publique invocation de l' objet (proxy de l' objet, méthode Méthode, Object [] args) lance Throwable {
System.out.println (method.getName () + "方法执行");
longue start = System.currentTimeMillis ();
Objet de l' objet = method.invoke (obj, args);
à long terme (= System.currentTimeMillis);
System.out.println ( "执行时间:" + (fin - début));
System.out.println (method.getName () + "方法执行结束");
objet de retour;
}
}
Agent dynamique utilise:
public class TestProxy2 {
public static void main (String [] args) {
Classe clazz = CImpl.class;
ClassLoader loader = clazz.getClassLoader ();
Class [] = interfaces clazz.getInterfaces ();
C = proxy (C) Proxy.newProxyInstance (chargeur, interfaces, nouveau DynamicProxy (clazz));
proxy.run ();
}
}