Nombre del patrón
Proxy
Clasificación del patrón
Estructural
Intención
Proporcionar un sustituto o marcador de posición de otro objeto pata controlar el acceso a éste.
También conocido como:
Surrogate (sustituto)
Virtual Proxy
Motivación
Una de las razones para controlar el acceso a un objeto es aplazar el costo total de su creación e inicializarlo hasta que realmente se necesita para usarlo. La solución es usar otro objeto, una imagen proxy, que actúa como un sustituto de la imagen real. El proxy actúa como la imagen y se encarga de instanciarla cuando esta es requerida.
Aplicabilidad
Proxy es aplicable cuando existe la necesidad de hacer una referencia más versátil y sofisticada a un objeto que con u simple puntero. Aquí hay varias situaciones en donde el patrón Proxy es aplicable:
1. Un proxy remoto proporciona un representante local de un objeto en un espacio de diferentes direcciones.
2. Un Proxy virtual posterga la creación de objetos costosos hasta el momento en que se necesitan.
3. Un Proxy de protección que controla el acceso al objeto original, son útiles cuando los objetos tienen diferentes permisos de acceso.
4. Referencias inteligentes, remplazan a una referencia o puntero para realizar alguna acción adicional:
- Contar el número de referencias a un objeto para liberarlo cuando nadie lo usa
- Cargar un objeto persistente en memoria cuando se referencia por primera vez
- Sincronizar el acceso a un objeto con un cerrojo
Estructura
Participantes
Proxy
- Mantiene una referencia que permite al proxy acceder al sujeto real. Proxy puede hacer referencia a Subject si la interfaz de RealSubject y Subject es la misma.
- Proporciona una interfaz idéntica a los Subject`s que el proxy puede sustituir por sujetos reales.
- Controla el acceso al sujeto real y puede ser responsable de crear y borrar el mismo.
Otras funciones dependen del tipo de proxy - Proxy remotos son responsables de la codificación de un requerimiento y sus argumentos y la codificación para la solicitud del sujeto real en un espacio de diferentes direcciones.
- Proxy virtuales pueden almacenar en cache información adicional acerca de los sujetos reales de modo que puede acceder a posponer estos.
- Proxy de protección verifica que la persona que llama tenga los permisos de acceso necesarios para realizar una solicitud.
Subject
Define la interfaz común para RealSubject y Proxy, para que un proxy pueda ser usado en cualquier RealSubject que espere.
RealSubject
Define el objeto real que el proxy representa.
Colaboraciones
El proxy envía solicitudes a RealSubject cuando sea apropiado.
Consecuencias
El patrón proxy introduce un nivel de indirección (redirección) al acceder a un objeto. El adicionar inderección tiene muchos usos, dependiendo el tipo de proxy.
1. Un proxy remoto puede ocultar el hecho que un objeto se encuentra en un espacio diferente de direcciones.
2. Un proxy virtual puede realizar optimizaciones como la creación de un objeto por solicitud.
3. Proxy de protección y referencias elegantes permiten el acceso más limpio a un objeto.
Implementación
Un Proxy no tiene que conocer el tipo de un sujeto real.
- Puede acceder a él a través de la interfaz abstracta
Se pueden utilizar facilidades de los lenguajes para implementarlo:
- En C++ se puede sobrecargar el operador de acceso a un miembro (->). Así cuando se accede a un miembro se pueden hacer acciones adicionales » Esto es válido sólo cuando no es necesario distinguir el tipo de operación que se accede en el objeto
Usos Conocidos
Ocultar y codificar direccionamiento
Proteger objetos verificando permisos de acceso
Patrones relacionados
El patrón Proxy se puede ver como un caso particular de Bridge:
- Un Proxy sólo tiene una implementación, y un Bridge puede tener más de una.
- Un Proxy se suele usar para controlar el acceso a su implementación, el Bridge permite cambiar una implementación dinámicamente
El Adaptader proporciona una interfaz diferente al objeto que adapta, pero el proxy tiene la misma interfaz. Aunque el proxy puede rehusar realizar una operación (así su interfaz puede verse como un subconjunto)
El Decorator se puede implementar de manera similar al Proxy pero el propósito es diferente: el decorador añade responsabilidades a un objeto, el proxy sólo controla su acceso
Referencias Bibliográficas
Design Patterns Elements of Reusable Object-Oriented Software, GoF.
http://kybele.escet.urjc.es/documentos/SI/Patrones/18_Proxy.ppt
http://grasia.fdi.ucm.es/jpavon/patrones/patronesestructurales.pdf
No hay comentarios:
Publicar un comentario