Actualizado el 21 de Marzo del 2018 (Publicado el 27 de Febrero del 2018)
751 visualizaciones desde el 27 de Febrero del 2018
44,7 KB
7 paginas
Creado hace 16a (11/05/2008)
Patrones de Diseño
Patrón estructural Proxy
Técnicas de Programación - Curso 2007/08
Proxy
Propósito
(cid:122) Proporcionar un representante o sustituto de otro objeto
para controlar el acceso a éste
Motivación
(cid:122) Retrasar el coste de crear e inicializar un objeto hasta
que es realmente necesario. Por ejemplo, no abrir las
imágenes de un documento hasta que no son visibles
(cid:122) Solución:
:TextDocument
image
:ImageProxy
fileName
en memoria
:Image
data
en disco
Proxy
Motivación
DocumentEditor
Image
- imageImp
- extent
draw()
getExtent()
store()
load()
Graphic
draw()
getExtent()
store()
load()
image
ImageProxy
- fileName
- extent
draw()
getExtent()
store()
load()
if (image==null)
image.draw();
image = loadImage(fileName);
if (image==null)
return extent;
else
return image.getExtent();
Proxy
Aplicabilidad
(cid:122) El patrón Proxy se usa cuando se necesita una referencia
a un objeto más flexible o sofisticada que un puntero.
Algunas situaciones comunes de aplicación son:
(cid:122) Proxy remoto: representa un objeto en otro espacio de direcciones
(cid:122) Proxy virtual: crea objetos costosos por encargo (como la clase
ImageProxy en el ejemplo de motivación)
(cid:122) Proxy de protección: controla el acceso a un objeto
(cid:122) Referencia inteligente: sustituto de un puntero que lleva a cabo
operaciones adicionales cuando se accede a un objeto (ej. contar el
número de referencias, cargar un objeto persistente en memoria,
bloquear el objeto para impedir acceso concurrente, ...)
Proxy
Estructura
Client
RealSubject
request()
...
Subject
request()
...
realSubject
Proxy
request()
...
...
realSubject.request();
...
Diagrama
de objetos
:Client
subject
:Proxy
realSubject
:RealSubject
(cid:122) Mantiene una referencia al objeto real
(cid:122) Proporciona una interfaz idéntica a la del objeto real
(cid:122) Controla el acceso al objeto real, y puede ser responsable de crearlo y
borrarlo
(cid:122) Otras responsabilidades dependen del tipo de proxy:
Proxy
Participantes
(cid:122) Proxy (ImageProxy):
(cid:122) Proxies remotos: codifican las peticiones, y las envían al objeto real
(cid:122) Proxies virtuales: pueden guardar información del objeto real (caché)
(cid:122) Proxies de protección: comprueban que el cliente tiene los permisos
necesarios para realizar la petición
(cid:122) Subject (Graphic): define una interfaz común para el proxy y el objeto
real, de tal modo que se puedan usar de manera indistinta
(cid:122) RealSubject (Image): clase del objeto real que el proxy representa
Proxy
Consecuencias
(cid:122) Introduce un nivel de indirección con diferentes usos:
(cid:122) Un proxy remoto puede ocultar el hecho de que un objeto reside en
(cid:122) Un proxy virtual puede realizar optimizaciones, como la creación de
otro espacio de direcciones
objetos bajo demanda
(cid:122) Los proxies de protección y las referencias inteligentes permiten
realizar tareas de mantenimiento adicionales al acceder a un objeto
(cid:122) Optimización copy-on-write
(cid:122) Copiar un objeto grande puede ser costoso
(cid:122) Si la copia no se modifica, no es necesario incurrir en dicho gasto
(cid:122) El sujeto mantiene un número de referencias, y sólo cuando se
realiza una operación que modifica el objeto, éste se copia
Comentarios de: Patrón estructural Proxy - Patrones de diseño (0)
No hay comentarios