El patrón de diseño Proxy Raúl Heras Alberto Blasco José Manuel Arévalo.

1 El patrón de diseño Proxy Raúl Heras Alberto Blasco Jos...
Author: Nazario Madrazo
0 downloads 2 Views

1 El patrón de diseño Proxy Raúl Heras Alberto Blasco José Manuel Arévalo

2 Introducción Los patrones estructurales se ocupan de cómo se combinan las clases y los objetos para formar estructuras más grandes. El Proxy es un patrón de tipo estructural asociado a objetos.

3 Definición Este patrón, nos proporciona un sustituto o representante de otro objeto para controlar el acceso a éste. Un objeto Proxy, recibe llamadas a métodos que pertenecen a otros objetos. El objeto Proxy, comparte interfaz o superclase común con el objeto que realmente provee el servicio.

4 Motivación Intermediarios entre objeto cliente y objeto deseado. El patrón obliga a que las llamadas a métodos de un objeto ocurran indirectamente a través de un objeto Proxy.

5 Aplicaciones Util cuando se desea retrasar la instanciación de un objeto hasta que sea necesario usarlo (optimiza operaciones costosas: invocar imagen). Proporciona un representante local de un objeto situado en otro espacio de direcciones (Proxy remoto o “Embajador”). Uso en sistemas concurrentes, mediante cerrojo, controlando el acceso al objeto original. Puede utilizarse como un sustituto de un simple puntero, que lleva a cabo operaciones adicionales cuando se accede a un objeto (contar el numero de referencias a un objeto real).

6 Consecuencias Un proxy puede ocultar el hecho de que un objeto reside en un espacio de direcciones diferente (proxy remoto). Puede llevar a cabo optimizaciones tales como crear un objeto por encargo (invocar imagen). Permiten realizar tareas de mantenimiento adicionales cuando se accede a un objeto (Proxy de protección y de referencias inteligentes).

7 Consecuencias Se introduce un nivel de indirección al acceder al objeto Se consigue una administración transparente de los servicios del objeto real.

8 Representación UML

9 Participantes Sujeto:  Define la interfaz común para el RealSubject y el Proxy, de modo que pueda usarse un Proxy en cualquier sitio en el que se espere un RealSubject. RealSubject:  Define el objeto real representado.

10 Participantes Proxy:  Mantiene una referencia que permite al Proxy acceder al objeto real.  Proporciona una interfaz idéntica a la del sujeto, de manera 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.

11 Ejemplo de implementación (sin Proxy) public interface Ivehiculo { void start(); void forward(); void stop(); } public class Coche implements Ivehiculo{ private String nombre; public Coche(String nombre){ this.nombre=nombre; } public void start() { System.out.println("coche"+this.nombre+"arranca"); } public void stop() { System.out.println("coche"+this.nombre+"frena"); } public void forward() { System.out.println("coche"+this.nombre+"acelera"); }

12 Ejemplo de implementación (sin Proxy) public class Cliente{ public static void main(String[]args){ Ivehiculo v = new Coche("Sin Proxy"); v.start(); v.forward(); v.stop(); }

13 Ejemplo de implementación (con Proxy) public class VehiculoProxy implements IVehiculo{ private IVehiculo v; public VehiculoProxy(IVehiculo v){ this.v = v; } public void start(){ System.out.println("Vehiculo Proxy: parado"); v.start(); System.out.println("Vehiculo Proxy: en marcha”); } public void forward(){ System.out.println("Vehiculo Proxy: en aceleracion”); v.forward(); } public void stop(){ System.out.println("Vehiculo Proxy: frenando”); v.forward(); }

14 Ejemplo de implementación (con Proxy) public class ClienteConProxy{ public static void main(String[]args){ Ivehiculo c = new Coche(“Con Proxy"); Ivehiculo v=new VehiculoProxy(c); v.start(); v.stop(); v.forward(); }

15 Implementación: conclusiones No Proxy: El cliente interactúa directamente con los métodos definidos en la interface Proxy: se encuentra entre la interfaz y la implementación e intercepta las llamadas a los métodos. La intención del Proxy es controlar el acceso al objeto deseado, además de mejorar la funcionalidad del mismo