Patrones de diseño de software: Proxy

Proxy es un patrón de diseño estructural que te permite proporcionar un sustituto para otro objeto. Un proxy controla el acceso al objeto original, lo que te permite realizar algo antes o después de que la solicitud llegue al objeto original.

¿Qué problema resuelve el proxy?

Imagínate que tienes un objeto que consume una gran cantidad de recursos del sistema. Lo necesitas de vez en cuando, pero no siempre. Podrías crear ese objeto solo cuando sea realmente necesario, pero esto podría causar mucha duplicación de código.

Además, poner el código directamente en la clase de nuestro objeto no siempre es posible, pues la clase puede ser parte de una biblioteca de terceros, por ejemplo.

El patrón Proxy quiere que crees una nueva clase de proxy con la misma interfaz que un objeto de servicio original. Después actualizas tu aplicación para que pase el objeto proxy a todos los clientes del objeto original. Cuando el proxy recibe una solicitud de un cliente, crea un objeto de servicio real y le delega todo el trabajo.

El Beneficio

Si necesitas ejecutar algo antes o después de la lógica principal de la clase, el proxy te permite hacerlo sin cambiar esa clase.

¿Cuándo usar el método proxy?

Podrías usar este método en los siguientes casos:

  • Inicialización diferida (proxy virtual)
  • Control de acceso (proxy de protección)
  • Ejecución local de un servicio remoto (proxy remoto)
  • Solicitudes de registro (proxy de registro)
  • Almacenamiento en caché de los resultados de la solicitud (proxy de caché)
  • Referencia inteligente. Si necesitas poder descartar un objeto no utilizado.

Pros y contras del patrón proxy

Los siguientes son algunos de los “pros y cons” de este patrón.

Pros

Contras

  • Puedes controlar el objeto de servicio sin que los clientes lo sepan

  • Puedes administrar el ciclo de vida del objeto de servicio cuando a los clientes no les importa

  • El proxy funciona incluso si el objeto de servicio no está listo o disponible

  • Principio abierto/cerrado. Puedes introducir nuevos proxies sin cambiar el servicio o los clientes

  • El código puede volverse más complicado ya que necesitas introducir muchas clases nuevas

  • La respuesta del servicio puede retrasarse

“Show me the code”

Si quieres tener una idea de cómo se ve el patrón Proxy, puedes ver este ejemplo de refacoring.guru en PHP.

En el ejemplo real verás cómo el patrón Proxy puede mejorar el rendimiento de un objeto de descarga al almacenar sus resultados en caché.

¿Utilizas el patrón Proxy en tus proyectos? ¿Qué tal la experiencia? ¡Coméntalo abajo!

Fuentes: