Proxy
- Área: Patrones de Diseño
- Carácter del recurso: Recomendado
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
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.
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
Código | Título | Tipo | Carácter |
---|---|---|---|
RECU-0013 | Patrones de diseño | Ficha | Recomendado |