¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
¡Acceso ilimitado 24/7 a todos nuestros libros y vídeos! Descubra la Biblioteca Online ENI. Pulse aquí
  1. Libros
  2. Patrones de diseño en C#
  3. El patrón Proxy
Extrait - Patrones de diseño en C# Los 23 modelos de diseño: descripción y soluciones ilustradas en UML 2 y C# [2ªedición]
Extractos del libro
Patrones de diseño en C# Los 23 modelos de diseño: descripción y soluciones ilustradas en UML 2 y C# [2ªedición] Volver a la página de compra del libro

El patrón Proxy

Descripción

El patrón Proxy tiene como objetivo el diseño de un objeto que sustituye a otro objeto (el sujeto) y que controla el acceso.

El objeto que realiza la sustitución posee la misma interfaz que el sujeto, volviendo la sustitución transparente de cara a los clientes.

Ejemplo

Queremos ofrecer para cada vehículo del catálogo la posibilidad de visualizar un pequeño vídeo de presentación del vehículo. Un clic sobre la fotografía de la presentación del vehículo permitirá reproducir este vídeo.

Una página del catálogo contiene numerosos vehículos y es muy pesado guardar en memoria todos los objetos de animación, pues los vídeos necesitan gran cantidad de memoria, y su transferencia a través de la red toma bastante tiempo.

El patrón Proxy ofrece una solución a este problema difiriendo la creación de los sujetos hasta el momento en que el sistema tiene necesidad de ellos, en este caso tras un clic en la fotografía del vehículo.

Esta solución aporta dos ventajas:

  • La página del catálogo se carga mucho más rápidamente, sobretodo si tiene que cargarse a través de una red como Internet.

  • Solo aquellos vídeos que van a visualizarse se crean, cargan y reproducen.

El objeto fotografía se llama el proxy del vídeo. Procede a la creación del sujeto únicamente tras haber hecho clic en ella. Posee la misma interfaz que el objeto vídeo. La figura 3-8.1 muestra el diagrama de clases correspondiente. La clase del proxy, AnimaciónProxy, y la clase del vídeo, Vídeo, implementan ambas la misma interfaz, a saber...

Estructura

1. Diagrama de clases

La figura 3-8.4 ilustra la estructura genérica del patrón.

images/figure16-4.png

Figura 3-8.4 - Estructura del patrón Proxy

Conviene observar que los métodos del proxy tienen dos comportamientos posibles cuando el sujeto real no ha sido creado: o bien crean el sujeto real y a continuación le delegan el mensaje (es el caso del método clic del ejemplo), o bien ejecutan un código de sustitución (es el caso del método dibuja del ejemplo).

2. Participantes

Los participantes del patrón son los siguientes:

  • Sujeto (Animación) es la interfaz común al proxy y al sujeto real.

  • SujetoReal (Vídeo) es el objeto que el proxy controla y representa.

  • Proxy (AnimaciónProxy) es el objeto que se sustituye por el sujeto real. Posee una interfaz idéntica a este último (interfaz Sujeto). Se encarga de crear y de destruir al sujeto real y de delegarle los mensajes.

3. Colaboraciones

El proxy recibe las llamadas del cliente en lugar del sujeto real. Cuando lo juzga apropiado, delega estos mensajes en el sujeto real. Debe, en este caso, crear previamente el sujeto real si no está creado ya.

Dominios de aplicación

Los proxys son muy útiles en programación orientada a objetos. Existen distintos tipos de proxy. Vamos a ilustrar tres:

  • Proxy virtual: permite crear un objeto de tamaño importante en el momento adecuado;

  • Proxy remoto: permite acceder a un objeto ejecutándose en otro entorno. Este tipo de proxy se implementa en sistemas de objetos remotos (RPC, Java RMI);

  • Proxy de protección: permite securizar el acceso a un objeto, por ejemplo mediante técnicas de autenticación.

Ejemplo en C#

Retomamos nuestro ejemplo en C#. El código fuente de la interfaz Animación aparece a continuación.

public interface Animacion 
{ 
    void dibuja(); 
    void clic(); 
} 

El código fuente C# de la clase Video que implementa esta interfaz aparece a continuación. En el marco de la simulación cada método muestra simplemente un mensaje, excepto el método clic que no realiza ninguna acción.

using System; 
 
public class Video : Animacion 
{ 
    public void clic() { } 
 
    public void dibuja() 
    { 
        Console.WriteLine("Mostrar el vídeo"); 
    } 
 
    public void carga() 
    { 
        Console.WriteLine("Cargar el vídeo"); 
    } 
 
    public void reproduce() 
    { 
        Console.WriteLine("Reproducir el vídeo"); 
    } 
} 

El código fuente del proxy, y por tanto de la clase AnimacionProxy aparece a continuación....