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 |
|
|
“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: