miércoles, 4 de mayo de 2016

Patrón Proxy

PATRÓN PROXY

PROPÓSITO

Proporcionar un representante o delegado que se encargue de controlar el acceso
a un objeto, generalmente por motivos de eficiencia.

CUANDO USARLO

En cualquier situación en que sea necesaria una referencia a un objeto más versátil
y/o sofisticada que un simple puntero. Por ejemplo :

  • Un apoderado remoto proporciona un representante local para un objeto en unespacio de direcciones diferente (J.Coplien los llama embajadores).
  • Un apoderado virtual crea por demanda objetos costosos.
  • Un apoderado de protección restringe, por motivos de seguridad, el acceso a un objeto.
  • Una referencia “inteligente” es una sustitución por un simple puntero, que incorpora servicios adicionales como cuenta del nº de referencias, carga de objetos persistentes en memoria cuando estos son referenciados y uso de cerrojos para controlar el acceso exclusivo a regiones críticas.

VENTAJAS


  • Se introduce un nivel de indirección en el acceso al objeto, que permite al apoderado remoto ocultar el hecho de que el objeto reside en un espacio de direcciones distinto, al apoderado virtual realizar optimizaciones como la creación de objetos por demanda y al apoderado de protección y a las referencias “inteligentes” realizar tareas adicionales de vigilancia sobre el objeto al que se accede. No obstante todo esto puede resultar un inconveniente, por motivos de claridad e inteligibilidad del diseño. 
  • Facilita otra optimización, relacionada con la creación de objetos por demanda : la técnica de COPY-ON-WRITE, que sólo hace efectiva la copia de un objeto oneroso cuando el acceso a él es de escritura, no de lectura.

Ejemplo de aplicación


En un editor de documentos que permite gráficas y dibujos complejos dentro de un documento se nos plantea el problema de que recuperar todos estos costosos elementos cada vez que se abre el documento es ineficiente e innecesario, por lo que podemos definir un “representante”, que ocupe su lugar, hasta que sea necesario cargarlos. Observe la figura 1

figura 1

Desarrollemos el código ahora.
y de esta manera se implementa en la función Main.

0 comentarios:

Publicar un comentario