Java Dynamic Agent Pattern Agent: Eine Rolle stellt eine andere Rolle dar, um bestimmte spezifische Funktionen zu erreichen.
Zum Beispiel: Die Beziehung zwischen Herstellern, Zwischenhändlern und Kunden. Wenn Kunden Produkte kaufen, haben sie weder direkt mit dem Hersteller zu tun, noch wissen sie, wie die Produkte hergestellt werden, und Zwischenhändler können die Produkte verpacken und einige After-Sales-Services werden angeboten.
Das Agentenmuster hat drei Rollen: 1. Abstrakte Subjektrolle 2. Agentensubjektrolle 3. Tatsächliche Agentenrolle
Werfen wir einen Blick auf die Realität eines statischen Proxys.
Ich nehme als Beispiel einen Panzer.
Abstrakte Themenrolle: Beweglich
öffentliche Schnittstelle Beweglich {
void move();
}
Die öffentliche Klasse TanktimeProxy implementiert Moveable{
privat Bewegliches t;
public TanktimeProxy(Moveable t) {
super();
this.t = t;
}
@Override
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("Die Laufzeit beträgt:"+(time2-time1));
}
}
öffentliche Klasse Tank implementiert Moveable{
@Override
public void move() {
System.out.println("TanK bewegt sich.....");
}
}
öffentliche Klasse TestTank {
public static void main(String[] args) {
Tank t = neuer Tank();
Beweglicher Zug = new TanktimeProxy(t);
move.move();
}
}
Als nächstes möchte ich ein Tagebuch vor und nach der move()-Methode von TanK hinzufügen:
Ich muss eine weitere Klasse schreiben, um diese Funktionalität zu implementieren:
Die öffentliche Klasse TanklogProxy implementiert Moveable{
privat Bewegliches t;
public TanklogProxy(Moveable t) {
super();
this.t = t;
}
@Override
public void move() {
System.out.println("start move.....");
t.move();
System.out.println("end move......");
}
}
öffentliche Klasse TestTank {
public static void main(String[] args) {
Tank t = neuer Tank();
Beweglicher Zug = new TanktimeProxy(t);
Moveable movet = new TanklogProxy(move);
movet.move();
}
}
Wenn ich vor und nach dem Aufruf der move()-Methode von Tank weitere Funktionen hinzufügen möchte, muss ich dann mehr Agenten-Themenrollen schreiben. Gibt es eine Möglichkeit? zur Lösung verwendet werden? Die Antwort lautet: Ja. Wir können Agenten-Themenrollen dynamisch generieren, um alle Proxy-Objekte zu vertreten.
Am Ende des Artikels möchte ich Ihnen einige Witzzitate von Programmierern mitteilen: IBM und Boeing 777
Die Boeing 777 ist das erste Flugzeug, das jemals vollständig in der virtuellen Realität des Computers entworfen und hergestellt wurde, wobei die Ausrüstung vollständig von IBM bereitgestellt wurde. Vor dem Testflug lud der Präsident von Boeing den technischen Direktor von IBM begeistert ein, am Testflug teilzunehmen, aber der Vorgesetzte sagte: „Ah, es ist eine große Ehre, aber an diesem Tag hat meine Frau Geburtstag, also …“
Der CEO von Boeing wurde wütend, als er das hörte: „Feigling, ich habe dir den Termin des Testflugs noch nicht gesagt!“