Proxy

RECU-0200 (Recurso Patrón)

Descripción

Este patrón nos proporciona un sustituto o representante de otro objeto para controlar el acceso a este.

Nombre

También conocido como Apoderado

Clasificación

Patrón estructural

Motivación

El principal motivo de no permitir el acceso directo a un objeto es reducir el coste que supone la creación y mantenimiento del mismos hasta que realmente es necesario. Imaginemos un documento con muchas imágenes embebidas, supone un consumo de recursos pero a su vez es necesaria la rapidez a la hora de abrir el documento. Si partimos de la idea de que no todas las imágenes se ven en el documento a la vez, solo se irán cargando aquellas que sean necesarias. Esta idea se puede implementar usando este patrón.

Aplicabilidad

  • Útil cuando se desea retrasar la instanciación de un objeto hasta que sea necesario usarlo.
  • Proporciona un representante local de un objeto situado en otro espacio de direcciones.
  • Uso en sistemas concurrentes mediante cerrojo, controlando el acceso al objeto original.

Estructura

La representación gráfica del modelo es la siguiente

Participantes

  • Sujeto: Define la interfaz común para Proxy y SujetoReal, de manera que pueda usarse un Proxy donde se espera un SujetoReal.
  • SujetoReal: define el objeto real representado.
  • Proxy: Mantiene un referencia que permite al proxy acceder al objeto real. Proporciona una interfaz idéntica a la del Sujeto de manera que pueda ser sustituido por un SujetoReal. Controla el acceso al SujetoReal, puede ser el responsable de su creación y borrado.

Colaboraciones

Proxy "suplanta" al SujetoReal cuando se considera apropiado.

Consecuencias

  • Un Proxy puede ocultar el hecho de que un objeto reside en un espacio de direcciones diferente.
  • Puede llevar a cabo optimizaciones tales como crear un objeto por encargo.
  • Permiten realizar tareas de mantenimiento adicionales cuando se accede a un objeto.

Implementación

Para realizar una correcta implementación del patrón debe considerarse:

  • Proxy no siempre conoce el tipo de objeto del SujetoReal. En el caso de que no le sea necesario instanciar objetos del SujetoReal no se necesita sabe su tipo de objeto, pero en el caso habitual sí.
  • Sobrecarga de operadores de acceso.

Contenidos relacionados

Recursos
Área: Desarrollo » Patrones de Diseño
Código Título Tipo Carácter
RECU-0013 Patrones de diseño Ficha Recomendado