Este artículo describe el problema de resolver la distribución de vino tinto basado en el modelo proxy de Java. Compártelo para su referencia, como sigue:
1. Definición de patrones
En el modo proxy, dos objetos participan en el procesamiento de la misma solicitud. El objeto proxy confía la solicitud recibida al objeto real para procesar. El objeto proxy controla el acceso de la solicitud, que reproduce un puente de mediación entre la aplicación del cliente y el objeto real. El modo proxy utiliza la agregación de objetos en lugar de la herencia, reduciendo efectivamente el acoplamiento entre los módulos de software.
2. Ejemplos de modelo
1 análisis de patrones
Tomamos prestada la distribución del vino para ilustrar este modelo.
2 Diagrama de clase estática en modo proxy
3 ejemplos de código
3.1 Interfaz de fábrica de vino tinto 1 Iredwine
paquete com.demo.real;/** * interfaz de vino tinto * * @author * */pública interfaz iredwine {// método para producir vino tinto public void producto (); // Método para vender el vino público void sell ();}3.2 Realización de una fábrica real en la fábrica de vino tinto
paquete com.demo.real.impl; import com.demo.real.iredwine;/** * Real Wine Production Factory * * @author * */public class RealredwineFactory implementa IREDWINE {// Método para producir vino tinto @Override Public void Product () {System.out.println ("fábrica de vino tinto produce vino tinto ..."); ");"); ");"); } // Método para vender el vino public Void sell () {System.out.println ("La fábrica de vino tinto vende vino tinto ..."); }}3.3 Crear un agente de vino tinto - RedwineProxy
paquete com.demo.proxy; import com.demo.real.iredwine;/** * agente de vino tinto * * @author * */public class redwineproxy implementa iredwine {// fabricante de vino tinto real private final iredwine redwine; // permiso del agente para vender vino de vino tinto Final Boolean permiso = verdadero; // Método de construcción predeterminado público RedwineProxy (iredwine redwine) {this.redwine = redwine; } // Método de agente para producir vino tinto (el agente no produce vino tinto y toma el vino de la fábrica real para vender) @Override public void Product () {// Determine si el agente tiene derecho a ser un vino tinto si (this.permission) {// el agente tiene derecho a vender vino tinto es un sistema legal.out.println ("[Esto es un agente de vino tinto legal]"); ");"); System.out.println ("El agente recibe un pedido y notifica a la fábrica para producir ..."); this.Redwine.Product (); } else {System.out.println ("[¡Este es un agente de vino tinto ilegal!]"); }} // Cómo vender vino tinto para agente @Override public void sell () {if (this.permission) {this.redwine.sell (); System.out.println ("El agente obtiene vino tinto al por mayor de la fábrica y lo vende a un precio más alto, ganando una cierta diferencia de él ..."); } else {System.out.println ("[¡Este es un agente de vino tinto ilegal!]"); }}}3.4 Vaya al agente del vino para comprar un cliente de vino tinto
paquete com.demo; import com.demo.proxy.redwineproxy; import com.demo.real.iredwine; import com.demo.real.impl.realredwinefactory;/** * aplicación principal * * @author * */public class Client {/** * @param args */public static void main (string [] string [] {////Class de clase pública IREDWINE RealRedwineFactory = new RealRedwineFactory (); // Obtener instancia de objeto proxy iredwine redwineproxy = new RedwineProxy (RealRedwineFactory); // El agente produce vino tinto (en realidad la producción real es la fábrica) RedwineProxy.Product (); // El agente vende vino tinto (precio al por mayor, luego lo vende a un precio más alto para ganar la diferencia) RedwineProxy.sell (); }}4 Resultados de ejecución
[Este es un agente legal de vino tinto]
El agente recibió la orden y notificó a la fábrica para producir ...
La fábrica de vino tinto produce vino tinto ...
La fábrica de vino tinto vende vino tinto ...
El agente obtiene vino tinto al por mayor de la fábrica y lo vende a un precio más alto, ganando una cierta diferencia de precio ...
Iii. Los principios de diseño de este patrón
1 carga de retraso para mejorar la eficiencia del sistema
2 Principio de responsabilidad única
4. Use ocasiones
1 proxy remoto: proporciona un proxy local para un objeto en diferentes espacios de dirección.
2 Agente virtual: si la creación de un objeto requiere mucho tiempo, puede llamarlo a través del objeto proxy. Antes de que se cree el objeto real, se devuelve una llamada falsa. Cuando se crea el objeto real, la llamada de método correspondiente del objeto real se devuelve al cliente.
3 El agente de protección controla el acceso al objeto original.
4 Las pautas inteligentes reemplazan los punteros simples, que realizan algunas operaciones adicionales al acceder a objetos.
V. Diagrama de clase estática del modo proxy
Rol de abstracto: una interfaz común que declara objetos reales y objetos proxy.
Rol real: el objeto objetivo que realmente maneja la solicitud.
Rol de agente: El rol de objeto proxy contiene referencias a objetos reales, por lo que el objeto proxy puede convertir la solicitud en objetos reales para su procesamiento. Al mismo tiempo, el objeto proxy también puede agregar operaciones adicionales antes y después de realizar la operación del objeto real.
Para obtener más contenido relacionado con Java, los lectores interesados en este sitio pueden ver los temas: "Estructura de datos de Java y tutorial de algoritmo", "Resumen de las puntas de nodo de operación Java DOM", "Resumen de los archivos Java y consejos de operación de directorio" y "Summary of Java Cache Operation Tips" ".
Espero que este artículo sea útil para la programación Java de todos.