I. PATRÓN DE DISEÑO: PROXY

A continuación se encuentra la plantilla del patrón objeto de estudio:

1. Nombre del patrón: Proxy.

2. Clasificación del patrón: Estructural.

3. Intención: Proporcionar un sustituto o representante de otro objeto para controlar el acceso a éste.

4. También conocido como: Apoderado

5. Motivación: Necesitamos crear objetos que consumen muchos recursos, pero no queremos instanciarlos a no ser que el cliente lo solicite o se cumplan otras condiciones determinadas.

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.

6. Aplicabilidad:

Este patrón se usa cuando:

•Se desea retrasar la instanciación de un objeto hasta que sea necesario usarlo (optimiza operaciones costosas: invocar imagen).
•Se desea proporcionar un representante local de un objeto situado en otro espacio de direcciones (Proxy remoto o “Embajador”).
•Se usan sistemas concurrentes, mediante cerrojo, controlando el acceso al objeto origina.
•Se quiera 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).

7. Estructura:



8. 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.
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.

9. Colaboraciones:

El proxy reenvía las peticiones de los clientes al sujeto real cuando es conveniente, dependiendo del tipo de proxy.

10. Consecuencias:

•El patrón proxy no es útil en su forma pura, debe ser combinado con un gestor de servicios para satisfacer algún comportamiento de utilidad.
•El proxy remoto oculta espacios de direcciones diferentes.
•El proxy virtual evita consumir recursos hasta que no es necesario.
•El proxy de protección y las referencias inteligentes permiten realizar tareas internas (recolección de basura, controlar accesos, etc.)
•Permite el copy-on-write: un objeto costoso es compartido hasta que alguien cambia su estado. Suele utilizarse junto con una cuenta de referencias por parte del objeto compartido. Cuando no es referenciado por nadie se autodestruye.

11. Implementación:

Tenemos un objeto padre Sujeto del que heredan otros dos: SujetoReal y Proxy, todos ellos tienen un método petición(). El cliente llamaría al método petición() de Sujeto, el cual pasaría la petición a Proxy, que a su vez instanciaría SujetoReal y llamaría a su petición().
Esto nos permite controlar las peticiones a SujetoReal mediante el Proxy, por ejemplo instanciando SujetoReal cuando sea necesario y eliminándolo cuando deje de serlo.

12. Código de ejemplo:

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");
}
}
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();
}
}
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();
}
}


13. Usos Conocidos:

Un servidor proxy es un equipo intermediario situado entre el sistema del usuario e Internet. Puede utilizarse para registrar el uso de Internet y también para bloquear el acceso a una sede Web.
El servidor de seguridad del servidor proxy bloquea algunas redes o páginas Web por diversas razones. En consecuencia, es posible que no pueda descargar el entorno de ejecución de Java (JRE) o ejecutar algunos applets de Java.
Servidores proxy: Funcionan como servidor de seguridad y como filtro de contenidos. Son un mecanismo de seguridad implementado por el ISP o los administradores de la red en un entorno de Intranet para desactivar el acceso o filtrar las solicitudes de contenido para ciertas sedes Web consideradas ofensivas o dañinas para la red y los usuarios. Mejoran el rendimiento. Guardan en la memoria caché las páginas Web a las que acceden los sistemas de la red durante un cierto tiempo. Cuando un sistema solicita la misma página web, el servidor proxy utiliza la información guardada en la memoria caché en lugar de recuperarla del proveedor de contenidos. De esta forma, se accede con más rapidez a las páginas Web.

14. Patrones relacionados:

Este patrón se puede implementar con:

Decorator

REFERENCIAS
[1] García Pérez Baltasar. Desarrollo rápido de aplicaciones. Version PDF.
[2] Orjuela Luz Marina. Modelos de Programación: Patrones GOF 12. Universidad Distrital Francisco José de Caldas. 2006.
[3] Cuesta Carlos E. Patrones de Diseño. Ingeniería de software I. Universidad Rey Juan Carlos. Versión PDF.
[4] Romero Tapia Esteban. Ayudantía N° 6. Versión PDF.
[5] http://www.lsi.us.es/docencia/get.php?id=668
[6] http://www.info-ab.uclm.es/asignaturas/42579/pdf/04-Capitulo4b.pdf

No hay comentarios:

Publicar un comentario