Este artículo describe el modo proxy dinámico del patrón de diseño Java. Compártelo para su referencia, como sigue:
El modo proxy estático se introdujo anteriormente, y el proxy dinámico es más poderoso que el modo proxy estático. Puede generar objetos proxy dinámicamente cuando el programa se está ejecutando. La llamada clase dinámica de proxy es una clase generada en tiempo de ejecución. Al generarlo, debe proporcionarle un conjunto de interfaces, y la clase dinámica de proxy afirma que implementa estas interfaces. Por supuesto, la clase dinámica de proxy actúa como un proxy. No intentas ayudarte a hacer un trabajo sustancial. Al generar su instancia, debe proporcionar un controlador y se hará cargo del trabajo real.
El papel del proxy dinámico es el mismo que el de proxy estático:
① Rol abstracto: una interfaz común entre objetos reales y objetos proxy. Lo que debe hacerse al declarar objetos reales y objetos proxy.
② Role real: implementa roles abstractos, defina la lógica comercial que se implementará por el rol real y es llamado por el rol de proxy.
③ Rol de proxy dinámico: la interfaz Invocathandler debe implementarse y se implementa el método de Invoke. El proxy dinámico siente que tiene una referencia de tipo de objeto, lo que indica el papel que requiere proxy dinámico. Definido como tipo de objeto, lo que significa que cualquier tipo de objeto puede ser proxy dinámicamente.
Aquí hay un ejemplo de código simple de un patrón de proxy dinámico simple:
1. Rol abstracto : una interfaz común entre objetos reales y objetos proxy. Lo que debe hacerse al declarar objetos reales y objetos proxy.
paquete com.tydic.dynamicproxy; sujeto de interfaz pública {Public void request ();}2.
paquete com.tydic.dynamicproxy; public class RealSubject implementa sujeto {@Override public void request () {System.out.println ("¡De verdadero asunto!"); }} 3 public Object invoke(Object proxy, Method method, Object[] args) El método de Invoke tiene tres parámetros. El proxy de parámetros se refiere a la clase proxy, el método representa el método proxy, Args es la matriz de parámetros en el método y el objeto de valor de retorno es el valor devuelto por la llamada del método de la instancia de proxy. Este método abstracto se implementa dinámicamente en la clase proxy.
paquete com.tydic.dynamicproxy; import java.lang.reflect.invocationHandler; import java.lang.reflect.method; public class Dynamicsubject implementa InvocationHandler {private Object sub; // Agent public DynamicSubject (object obj) {this.sub = obj; } @Override public Object Invoke (Proxy de objeto, método Método, objeto [] args) lanza lando {system.out.println ("antes de llamar:" + método); // La función se puede agregar antes y después del método del método proxy.invoke (sub, args); System.out.println ("Después de llamar:" + método); regresar nulo; }} 4. Escriba el código del cliente : se requiere una clase proxy. La clase principal de todas las clases proxy dinámicas de la clase proxy, proporcionando métodos estáticos para crear clases e instancias proxy dinámicas. La clase proxy tiene un método estático public static Object newProxyInstance(ClassLoader loader, Class<?>[] interfaces, InvocationHandler h) . El primer parámetro representa el cargador de clase de la clase proxy dinámica, el segundo es la matriz de clases de la interfaz que debe implementar la clase dinámica proxy, y el tercer parámetro es el objeto InvocationHandler. Cuando el proxy dinámico llama al método que requiere el proxy, se llamará al método de invocación del objeto InvocationHandler.
paquete com.tydic.dynamicproxy; import java.lang.reflect.proxy; public class Client {public static void main (string [] args) {somett = new RealSubject (); Dynamicsubject manejo = new DynamicSubject (sujeto); // Objeto de proxy de generación dinámica Subs sub = (sujeto) proxy.newproxyInstance (dynamicsubject.class.getClassLoader (), somet.getclass (). GetInterfaces (), manejo); sub.request (); // El método de invocación de mango en realidad se llama}}Para obtener más contenido relacionado con Java, los lectores interesados en este sitio pueden ver los temas: "Introducción y tutorial avanzado sobre la programación orientada a objetos de Java", "Tutorial sobre la estructura de datos de Java y el algoritmo", "Resumen de la operación de Java DOM Node Node", "Summary of Java File and Directory Operation Skilly" y "Summary of Java Cache Skitch" Habilidades "
Espero que este artículo sea útil para la programación Java de todos.