terminal

codeando_simple

terminal

menu

terminal

search_module

guest@codeandosimple: ~/system/search $ grep -r "" .

Press [ENTER] to execute search

Status

Engine: Ready

Database: Online

Index: V2.1.0_LATEST

bash — cat proxy.md
guest@codeandosimple: ~/blog/design-patterns $ cat proxy.md

Patrón Proxy_

// "Los problemas que permanecen persistentemente sin resolver, deberían ser tomados como preguntas cuestionadas de forma incorrecta" - Alan Watts

# 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

Estructura UML Proxy

# 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.

Ejemplo Proxy Imágenes

# 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.