📡 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 elSubject
sin necesariamente saber si está trabajando con unRealSubject
o 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 elProxy
como por elRealSubject
. Representa la interfaz que elClient
utiliza 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
Subject
y define el objeto real que elProxy
está destinado a representar.RealSubject
implementa 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
Subject
y 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
Proxy
implementa el métodoRequest()
que es llamado por elClient
. Dentro de este método, elProxy
puede realizar operaciones adicionales y, finalmente, delegar la llamada alRealSubject
llamando 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.