# Propósito
El patrón Proxy brinda un sustituto de un objeto para controlar el acceso, posponer su creación o realizar acciones adicionales (carga tardía, validación, etc.).
Podemos verlo como un representante que hace de intermediario con el objeto real.
# Problema
-
Control de Acceso: Restringir quién accede al objeto.
-
Costos de Creación: Posponer creación de objetos pesados (lazy loading).
-
Referencias Remotas: Trabajar con objetos en otros espacios de memoria.
# Solución
La solución que propone el Proxy es:
-
Sustitución: Intermediario con interfaz idéntica al objeto real.
-
Control: Agrega validación, carga tardía o seguridad antes de delegar.
# Estructura
# Participantes
- Subject: Interfaz común para Proxy y RealSubject.
- RealSubject: El objeto que realiza la operación real.
- Proxy: Representante que controla el acceso.
- Client: Usa el intermediario.
# Cuándo Usarlo
-
Necesidad de control de acceso estricto.
-
Gestión de operaciones costosas bajo demanda.
# Ventajas
-
verified
Separación responsabilidades: Logging, seguridad, etc., aislados.
-
verified
Rendimiento: Carga tardía y gestión de conexiones eficiente.
# Desventajas
-
warning
Retardo: Intermediario puede introducir demora.
-
warning
Complejidad: Capa extra de abstracción.
# Ejemplo: Imágenes HD
Gestionamos imágenes de alta resolución. Son pesadas y cargarlas todas al inicio no es eficiente.
# Código Java
class ImageProxy implements Image {
private HighResImage realImage;
public void display() {
if (realImage == null) realImage = new HighResImage(path);
realImage.display();
}
}
public class Client {
public static void main(String[] args) {
Image img = new ImageProxy("photo.jpg");
img.display(); // Solo aquí se carga el archivo
}
}
# Mapeo Participantes
- Image (Subject): Interfaz común.
- HighResImage (RealSubject): Operación costosa.
- ImageProxy: Sustituto con lazy loading.
# Conclusiones
Solución eficiente para gestionar recursos costosos, cargándolos solo cuando es necesario, mejorando rendimiento y experiencia de usuario.
# Patrones relacionados
Adapter
Brinda interfaz diferente; Proxy brinda la misma.
Decorator
Agrega responsabilidades; Proxy actúa como intermediario de acceso.