You are on page 1of 12

PATRON DE DISEÑO DE SOFTWARE: PROXY

JORGE ALEJANDRO MORALES CAÑAVERAL


FELIPE SALAZAR DELGADO

INSTITUTO TECNOLÓGICO METROPOLITANO I.T.M


INSTTITUCIÓN UNIVERSITARIA
FACULTAD DE INGENIERÍAS
INGENIERÍA DE SISTEMAS
MEDELLÍN
2018
Contenido
INTRODUCCION .......................................................................................................................... 3

1. EL PATRON PROXY ............................................................................................................. 4

1.1 PROPOSITO .................................................................................................................... 4


1.2 MOTIVACIÓN ................................................................................................................ 4
2 CARACTERISTICAS ............................................................................................................. 7

2.1 Aplicabilidad ......................................................................................................................... 7


 Proxy remoto .................................................................................................................... 7
 Proxy virtual ..................................................................................................................... 7
 Proxy de protección .......................................................................................................... 7
 Referencia inteligente ....................................................................................................... 7
2.1 Estructura .............................................................................................................................. 8
2.2 Participantes .......................................................................................................................... 8
2.3 Colaboraciones ...................................................................................................................... 9
2.4 Consecuencias ....................................................................................................................... 9
3. VENTAJAS Y DESVENTAJAS PROXY ............................................................................ 11

3.1Ventajas................................................................................................................................ 11
3.2 Desventajas ......................................................................................................................... 11
REFERENCIAS ............................................................................................................................ 12
INTRODUCCION

El presente documento aborda uno de los patrones estructurales aplicado para el diseño Software,
el Proxy el cual según Erich Gamma autor del libro Patrones de diseño, lo define de la siguiente
manera:

Una razón para controlar el acceso a un objeto y retrasar todo el coste total de su creación
e inicialización hasta que realmente necesitemos usarlo. Pensemos en un editor de
documentos que puede insertar objetos gráficos en un documento. Algunos de estos
objetos gráficos, como las imágenes raster, pueden ser costosos de crear. Sin embargo,
abrir un documento debería ser una operación que se efectuase rápidamente, por lo que
debemos evitar crear todos los objetos costos a la vez en cuanto se abre el documento.
Por otro lado, tampoco es necesario, ya que no todos esos objetos serán visibles en el
documento al mismo tiempo. (Gamma Erich, 2003, pág. 191).
1. EL PATRON PROXY

Este patrón consiste en interponer un intermediario (Proxy) entre un objeto y los demás que lo
utilizan. Se diferencia del patrón Adaptador en que el objeto "adaptado" solamente puede ser
manipulado a través del objeto Proxy.
Se suele utilizar para implementar comportamientos "vagos" (lazy). Por ejemplo, si tenemos
muchos objetos imagen en un documento, se tardaría mucho tiempo en abrir el documento al
cargar las imágenes de disco. Para evitarlo podemos sustituir los objetos imagen por objetos
proxy Imagen, con el mismo interfaz, pero que solamente cargan la imagen cuando se va a
visualizar.
Debemos insistir en dos aspectos que caracterizan el patrón Proxy:

 El objeto Apoderado tiene el mismo interfaz que el objeto "Protegido". Para facilitar esto
se puede derivar el objeto Apoderado de la misma clase padre que el objeto "Protegido",
pero no es absolutamente necesario.
 El objeto "Protegido" solamente puede ser manipulado por su correspondiente
Apoderado.

Un ejemplo típico de aplicación del patrón proxy es el de un editor de documentos. El editor


podrá incluir imágenes y dibujos complejos, y se plantea el problema de recuperar todos estos
costosos objetos cada vez que se abre el documento. La aplicación del patrón proxy soluciona el
problema definiendo un "representante", que ocupe su lugar, hasta que sea necesario cargarlos.

1.1 PROPOSITO Proporcionar un representante o sustituto de otro objeto para controlar el


acceso a éste.

1.2 MOTIVACIÓN 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 sean
necesarias.
Figura 1: Ejemplo de Proxy

En la figura 1 el proxy de imagen crea la imagen real solo cuando el editor de documentos le
pide que se dibuje, al invocar la operación Dibujar. El proxy redirige las siguientes peticiones
directamente a la imagen. Por lo tanto, debe mantener una referencia a la imagen después de
crearla. Supongamos que las imágenes se almacenan en archivos separados. En este caso,
podemos usar el nombre del archivo como la referencia al objeto real. El proxy también
almacena su extensión, esto es, su ancho y alto. La extensión permite al proxy responder a las
preguntas sobre su tamaño que le haga el formateador sin crear realmente la imagen.

El siguiente diagrama de clase ilustra este ejemplo con más detalle:

Figura 2: Ejemplo Proxy 2


En la Figura 2: Ejemplo Proxy. El editor de documentos accede a las imágenes insertadas a
través de la interfaz definida por la clase Abstracta Gráfico. ProxyImagen es una clase para
imágenes que se crean a petición. ProxyImagen tiene como referencia a la imagen en el disco el
nombre del fichero, el cual recibe como parámetro el constructor de la clase.
ImageProxy también guarda la caja que circunscribe la imagen y una referencia a la instancia de
Imagen real, la cual no será válida hasta que el proxy cree dicha imagen real. La operación
Dibujar se asegura de que la imagen ha sido creada antes de enviarle la petición.
ObtenerExtension redirige la petición a la imagen sólo si ésta ha sido creada; en caso contrario,
es ProxyImagen quien devuelve su extensión.
2 CARACTERISTICAS

 Proporciona soluciones concretas en la creación de objetos pesados.


 Proporciona soluciones técnicas para la utilización de las cargas de objetos de gran
tamaño.
 Se utilizan en situaciones frecuentes.
 Favorece la reutilización de código.

2.1 Aplicabilidad

El patrón proxy se usa cuando se necesita una referencia a un objeto más flexible o sofisticado
que un puntero. Algunas situaciones comunes de aplicación son:

 Proxy remoto Representa un objeto en otro espacio de direcciones.


 Proxy virtual: Crea objetos costosos por encargo (como la clase ImageProxy).
 Proxy de protección: Controla el acceso a un objeto.
 Referencia inteligente: Es un sustituto de un puntero que lleva a cabo operaciones
adicionales cuando se accede a un objeto. Algunos ejemplos típicos son:

- Contar el número de referencias al objeto real, de manera que este pueda liberarse
automáticamente cuando no haya ninguna referencia apuntándole.
- Cargar un objeto persistente en la memoria cuando es referenciado por primera vez.
- Comprobar que se bloquea el objeto real antes de acceder a él para garantizar que no
puede ser modificado por ningún otro objeto.
2.1 Estructura

Figura 3: Estructura Proxy

Este es un posible diagrama de objetos de una estructura de proxies en tiempo de ejecución:

Figura 4: Estructura proxy en ejecución

2.2 Participantes

 Proxy (ProxyImagen)

 Mantiene una referencia que permite al proxy acceder al sujeto real. El Proxy puede
referirse a un Subject en caso de que las interfaces de RealSubject y Subject sean la
misma.
 Proporciona una interfaz idéntica a la del Sujeto para que un proxy pueda ser
sustituido por el sujeto real.
 Controla el acceso al sujeto real y puede ser responsable de su creación y borrado.

 Otras responsabilidades dependen del tipo de proxy:


o Los proxies remotos son responsables de codificar una solicitud y sus
argumentos para enviar la solicitud codificada al sujeto real que se
encuentra en un espacio de direcciones diferente.
o Los proxies virtuales pueden guardar la información adicional sobre el
sujeto real, por lo que pueden retardar el acceso al mismo. Por ejemplo, el
proxyImagen guarda la extensión de la imagen real.
o Los proxies de protección comprueban que el llamador tenga los permisos
de acceso necesarios para realizar una petición.

 Sujeto(gráfico)
 Define la interfaz común para RealSubject y el proxy, de modo que pueda usarse
un proxy en cualquier sitio en el que se espere un SujetoReal.

 RealSubject (imagen)
 Define el objeto real que representa el proxy.

2.3 Colaboraciones

El Proxy redirige peticiones al SujetoReal cuando sea necesario, dependiendo del tipo de proxy.

2.4 Consecuencias
El patrón de diseño proxy introduce cierto rango de desvió sobre el acceso de un objeto, los usos
de este desvió dependen del tipo de proxy.
 Un proxy remoto puede ocultar el hecho de que un objeto reside en otro espacio de
direcciones.
 Un proxy virtual puede realizar optimizaciones, como la creación de objetos bajo
demanda.
 Los proxies de protección y las referencias inteligentes permiten realizar tareas de
mantenimiento adicionales al acceder a un objeto.

Optimización copy-on-write

 Copiar un objeto grande puede ser costoso.


 Si la copia no se modifica, no es necesario incurrir en dicho gasto.
 El sujeto mantiene un número de referencias, y sólo cuando se realiza una operación que
modifica el objeto, éste se copia
3. VENTAJAS Y DESVENTAJAS PROXY

3.1 Ventajas
 Mantiene una referencia que permite al proxy acceder al objeto real.
 Proporciona una interfaz igual que la del sujeto real.
 Controla el acceso al sujeto real, y puede ser responsable de crearlo y borrarlo.

Otras responsabilidades, depende del tipo de proxy:

Proxy remoto  Codifica peticiones y se las manda al sujeto.


Proxy virtual  Guarda información adicional sobre el sujeto, para retardar el acceso al
mismo.
Proxy de protección  comprueba.

 Copiar un objeto grande puede ser costoso, si la copia no se modifica, no ay necesidad de


incurrir en dicho gasto.
 El sujeto mantiene una cuenta de referencias, solo cuando se hace objeto. Una
operación que modifica el objeto, se copia realmente ejemplo: Clase String

3.2 Desventajas

 Introduce un nivel de induración adicional, que tiene muchos posibles usos.


 Un proxy remoto puede ocultar el hecho de que un objeto reside en otro espacio de
direcciones.
 Un proxy virtual puede optimizarse, como crear objetos de bajo demanda.
 Tanto los proxy de protección, como las referencias inteligentes permiten realizar tareas
de un mantenimiento adicionales cuando se accede a un objeto.
REFERENCIAS

Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1993, July). Design patterns: Abstraction and
reuse of object-oriented design. In European Conference on Object-Oriented Programming (pp.
406-431). Springer, Berlin, Heidelberg.

http://www.uml.org.cn/c++/pdf/DesignPatterns.pdf
Ros, M. Z. (2015). Patrones en elearning. Elementos y referencias para la formación. Revista de
Educación a Distancia, (27).

You might also like