Agent de modèle d'agent dynamique Java : un rôle représente un autre rôle pour réaliser certaines fonctions spécifiques.
Par exemple : la relation entre les fabricants, les intermédiaires et les clients. Lorsque les clients achètent des produits, ils ne traitent pas directement avec le fabricant et ne savent pas non plus comment les produits sont fabriqués. Les clients ne traitent qu'avec des intermédiaires, et les intermédiaires peuvent emballer les produits. et certains services après-vente sont fournis.
Le modèle d'agent a trois rôles : 1. Rôle de sujet abstrait 2. Rôle de sujet d'agent 3. Rôle d'agent réel
Jetons un coup d'œil à la réalité d'un proxy statique.
Je vais prendre un char comme exemple.
Rôle du thème abstrait : mobile
interface publique mobile {
déplacement nul();
}
la classe publique TanktimeProxy implémente Moveable{
privé mobile t;
public TanktimeProxy (t mobile) {
super();
ceci.t = t;
}
@Outrepasser
public void move() {
long time1 = System.currentTimeMillis();
System.out.println("time1="+time1);
t.move();
long time2 = System.currentTimeMillis();
System.out.println("time2="+time2);
System.out.println("La durée d'exécution est :"+(time2-time1));
}
}
la classe publique Tank implémente Moveable{
@Outrepasser
public void move() {
System.out.println("Le réservoir se déplace.....");
}
}
classe publique TestTank {
public static void main (String[] arguments) {
Réservoir t = nouveau réservoir ();
Déplacement mobile = new TanktimeProxy(t);
move.move();
}
}
Ensuite, je souhaite ajouter un journal avant et après la méthode move() de TanK :
Je dois écrire une autre classe pour implémenter cette fonctionnalité :
la classe publique TanklogProxy implémente Moveable{
privé mobile t;
public TanklogProxy (t mobile) {
super();
ceci.t = t;
}
@Outrepasser
public void move() {
System.out.println("démarrer le déplacement.....");
t.move();
System.out.println("fin du déplacement...");
}
}
classe publique TestTank {
public static void main (String[] arguments) {
Réservoir t = nouveau réservoir ();
Déplacement mobile = new TanktimeProxy(t);
Movet mobile = new TanklogProxy(move);
movet.move();
}
}
Si je souhaite ajouter plus de fonctions avant et après l'appel de la méthode move() de Tank, dois-je écrire plus de rôles de thème d'agent ? Cela rendra le code trop gros et difficile à maintenir. être utilisé pour le résoudre ? La réponse est oui. Nous pouvons générer dynamiquement des rôles de thème d'agent pour proxy tous les objets proxy.
À la fin de l'article, j'aimerais partager avec vous quelques citations blagues de programmeurs : IBM et Boeing 777
Le Boeing 777 est le premier avion jamais conçu et fabriqué entièrement en réalité virtuelle informatique, à l'aide d'équipements entièrement fournis par IBM. Avant le vol d'essai, le président de Boeing a invité avec enthousiasme le directeur technique d'IBM à participer au vol d'essai, mais le superviseur a déclaré : "Ah, c'est un grand honneur, mais c'est l'anniversaire de ma femme ce jour-là, alors..."...
Le PDG de Boeing s'est mis en colère lorsqu'il a entendu ceci : « Lâche, je ne vous ai pas encore annoncé la date du vol d'essai !