📡 Proxy
Estructura
El diagrama UML que proporcionaste muestra la estructura del patrón de diseño Proxy. Aquí está el detalle de cada parte del diagrama:
-
Cliente (Client):
- La clase que actúa como consumidor de los servicios proporcionados por el
Subject. El cliente interactúa con elSubjectsin necesariamente saber si está trabajando con unRealSubjecto unProxy.
- La clase que actúa como consumidor de los servicios proporcionados por el
-
Sujeto (Subject):
- Es una interfaz que define una operación común llamada
Request()que debe ser implementada tanto por elProxycomo por elRealSubject. Representa la interfaz que elClientutiliza para trabajar con los objetos.
- Es una interfaz que define una operación común llamada
-
Sujeto Real (RealSubject):
- La clase que hereda o implementa la interfaz
Subjecty define el objeto real que elProxyestá destinado a representar.RealSubjectimplementa la operación realRequest()que el cliente quiere invocar.
- La clase que hereda o implementa la interfaz
-
Proxy:
- Una clase que también implementa la interfaz
Subjecty contiene una referencia alRealSubject. Su propósito es controlar el acceso alRealSubject, posiblemente realizando tareas adicionales como carga perezosa, control de acceso, buffering, etc., cuando se invoca su métodoRequest(). - El
Proxyimplementa el métodoRequest()que es llamado por elClient. Dentro de este método, elProxypuede realizar operaciones adicionales y, finalmente, delegar la llamada alRealSubjectllamando arealSubject->Request().
- Una clase que también implementa la interfaz
Funcionamiento del Proxy
Cuando el Client invoca Request(), puede hacerlo a través de un objeto Proxy. El Proxy entonces tiene la oportunidad de interceder en la operación. Puede realizar acciones antes o después de pasar la llamada a Request() del RealSubject. Este enfoque es útil para:
- Retrasar la creación del objeto real solo cuando se necesita realmente (
Lazy Initialization). - Controlar el acceso al objeto real por razones de seguridad (
Protection Proxy). - Gestionar la interacción con un objeto que está en un espacio de memoria diferente (
Remote Proxy).
Ejemplo
Imagina que el RealSubject es un sistema de gestión de documentos y el Proxy proporciona un control de acceso seguro. Cuando un cliente solicita abrir un documento a través del método Request(), el Proxy puede verificar las credenciales del usuario antes de permitir o negar el acceso al documento solicitando el método Request() en el RealSubject.
En Resumen
El patrón Proxy es un patrón estructural esencial en el diseño de software que proporciona un objeto sustituto para otro objeto para controlar el acceso a él. Este patrón es particularmente útil para operaciones costosas o de seguridad, permitiendo que las operaciones se realicen de manera más eficiente o segura.