En la edición anterior nos hicimos foco en el patrón de comportamiento STRATEGY. En esta entrega vamos a hacer foco en el patrón estructural PROXY. Allá vamos!
Como comenté en el artículo introductorio a los patrones de diseño (acá el link), un patrón estructural es aquel que especifica la forma en que las clases se relacionan con otras.
También vimos que hay 4 elementos que definen un patrón. Así que vamos a utilizarlos para exponer el patrón PROXY.
Patrón PROXY
Nombre: PROXY
Problema: Restringir el acceso a un objeto por el uso excesivo de memoria. Condiciones e información necesaria para el funcionamiento de un objeto pero que se proveen desde afuera del mismo.
Solución: Utilizar una capa de abstracción, es decir, una clase que controle y maneje los recursos necesarios para poder acceder al objeto deseado.
Consecuencias:
- Ventajas: Una de las principales es la seguridad que tenemos de que, como el proxy es lo único que interactúa con el objeto, el estado del mismo se modifica a través del proxy. Gestiona los objetos que consumen muchos recursos y, al hacer ese manejo, evita que haya muchas instancias de los mismos.
- Desventajas: La principal es que agrega una capa de abstracción extra que a veces puede ser un inconveniente ya que permite que haya gente usando el objeto a través del proxy y otros de manera directa. Ocasionando un comportamiento errante al utilizar el proxy.
Tipos de proxy
Cabe destacar que hay 4 tipos de proxy y son los siguientes:
1) PROXY REMOTO: simula un representante local de un objeto externo.
2) PROXY VIRTUAL: se usan pedir objetos que son costosos (desde el punto de vista de la memoria).
3) PROXY PROTECCIÓN: permite controlar el acceso a un objeto dependiendo de ciertos permisos.
4) PROXY INTELIGENTE: realiza operaciones adicionales antes de acceder al objeto.
Ejemplo
El diagrama de clases quedaría de la siguiente manera:
Nótese que se utiliza una interfaz que implementa el objeto real y el proxy. Esto se hace para que lo que usa el proxy no sepa que lo está usando y sea transparente para él.
En caso de no utilizar la interfaz, el que quiera acceder al objeto va a tener que saber que se está comunicando con el proxy ya que sería de un tipo distinto al objeto real. El diagrama quedaría de la siguiente manera:
Conclusión
Lo que me gustaría que se lleven es lo que aporta este patrón, esto sería resguardar ciertos datos por temas de seguridad o por ser costosa la búsqueda de los mismos. Como también podría ser preparar un ambiente antes de hacer la petición. Es decir, cuando se necesita cubrir el objeto real para manipular las peticiones y accionar previo a la petición al objeto real.
Sin mucho más que añadir, concluyo esta artículo. Con la esperanza que me acompañen a seguir investigando en el mundo de los patrones de diseño. En el próximo artículo estaremos viendo un patrón de tipo creacional. Saludos!