Agente de patrón de agente dinámico de Java: un rol representa otro rol para lograr ciertas funciones específicas.
Por ejemplo: la relación entre fabricantes, intermediarios y clientes. Cuando los clientes compran productos, no tratan directamente con el fabricante ni saben cómo se producen los productos. Los clientes solo tratan con los intermediarios, y los intermediarios pueden empaquetar los productos. y se proporcionan algunos servicios postventa.
El patrón de agente tiene tres roles: 1. Rol de sujeto abstracto 2. Rol de sujeto de agente 3. Rol de agente real
Echemos un vistazo a la realidad de un proxy estático.
Tomaré un tanque como ejemplo.
Rol del tema abstracto: Móvil
interfaz pública Móvil {
movimiento vacío();
}
La clase pública TanktimeProxy implementa Moveable{
muebles privados t;
público TanktimeProxy (t móvil) {
súper();
esto.t = t;
}
@Anular
movimiento vacío público() {
mucho tiempo1 = System.currentTimeMillis();
System.out.println("tiempo1="+tiempo1);
t.move();
mucho tiempo2 = System.currentTimeMillis();
System.out.println("time2="+time2);
System.out.println("El tiempo de ejecución es:"+(time2-time1));
}
}
implementos de tanque de clase pública movibles {
@Anular
movimiento vacío público() {
System.out.println("El tanque se mueve...");
}
}
tanque de prueba de clase pública {
público estático vacío principal (String [] argumentos) {
Tanque t = nuevo Tanque();
Movimiento móvil = new TanktimeProxy(t);
mover.move();
}
}
A continuación, quiero agregar un diario antes y después del método move() de TanK:
Tengo que escribir otra clase para implementar esta funcionalidad:
La clase pública TanklogProxy implementa Moveable{
muebles privados t;
TanklogProxy público (t móvil) {
súper();
esto.t = t;
}
@Anular
movimiento vacío público() {
System.out.println("iniciar movimiento...");
t.move();
System.out.println("finalizar movimiento...");
}
}
tanque de prueba de clase pública {
público estático vacío principal (String [] argumentos) {
Tanque t = nuevo Tanque();
Movimiento móvil = new TanktimeProxy(t);
Movet móvil = new TanklogProxy(mover);
movet.move();
}
}
Si quiero agregar más funciones antes y después de llamar al método move() de Tank, ¿necesito escribir más roles de tema de agente? Esto hará que el código sea demasiado pesado y difícil de mantener. ¿Se puede utilizar para resolverlo? La respuesta es sí. Podemos generar dinámicamente roles de tema de agente para representar todos los objetos proxy.
Al final del artículo, me gustaría compartir con ustedes algunas citas chistosas de programadores: IBM y Boeing 777.
El Boeing 777 es el primer avión jamás diseñado y fabricado íntegramente en realidad virtual por ordenador, utilizando equipos íntegramente proporcionados por IBM. Antes del vuelo de prueba, el presidente de Boeing invitó con entusiasmo al director técnico de IBM a participar en el vuelo de prueba, pero el supervisor dijo: "Ah, es un gran honor, pero ese día es el cumpleaños de mi esposa, así que..."...
El director general de Boeing se enfadó al oír esto: "¡Cobarde, todavía no te he dicho la fecha del vuelo de prueba!".