Patrones de Diseño - Patrón Proxy/ Representante - ¿Que es el Patrón de Diseño Proxy?

Hola amigos hoy vamos a seguir con los patrones de diseño, en el dia de hoy vamos a ver el patrón de diseño Proxy/ Surrogate.

Patrones de Diseño - ¿Que es el Patrón de Diseño Proxy?

El patrón de diseño Proxy/ Surrogate proporciona un substituto o representante de otro objeto para controlar este.

Diagrama UML


Patrones de Diseño - Patrón Proxy/ Representante - ¿Que es el Patrón de Diseño Proxy?

ISubject: 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. 
ProxySubject: 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. 


Nombre del patrón:
Proxy/Surrogate/Representante

Clasificación del Patrón:
Estructural

Intención:
Proporcionar un representante de otro objeto, por distintas razones como pueden ser el acceso, la velocidad o la seguridad, entre otras. 

Motivación:
Retrasar el costo de crear e inicializar un objeto hasta que es realmente necesario. Por ejemplo, no abrir las imágenes de un documento hasta que no son visibles. 
Puede haber ocasiones en que se desee posponer el coste de la creación de un objeto hasta que sea necesario usarlo. 
El objeto proxy actúa en lugar del verdadero objeto, y ofrece las misma interfaz, y las solicita en el objeto cuando es necesario. 

Ejemplo:
Problema: Se requiere abrir un documento, para abrir se necesita verificar que el usuario tenga permisos y luego, se debe verificar si el usuario se encuentra en la misma pagina que la imagen para que no sea cargada innecesariamente en memoria.


Solución:


Patrones de Diseño - Patrón Proxy/ Representante - ¿Que es el Patrón de Diseño Proxy?


IDocumento:
package ar.com.patronesdisenio.proxy.interfaces;
/**
* @author nconde
*/
public interface IDocumento {

public void acceder(String usuario);
public void cargarImagen(Integer pagina);

}



Documento:
package ar.com.patronesdisenio.proxy.imp;
import ar.com.patronesdisenio.proxy.interfaces.IDocumento;

/**
* @author nconde
*/
public class Documento implements IDocumento{

@Override
public void acceder(String usuario) {
System.out.println("Abriendo documento");
}

@Override
public void cargarImagen(Integer pagina) {
System.out.println("Cargando Imagen pagina: "+ pagina );
}
}


DocumentoProxy:
package ar.com.patronesdisenio.proxy.imp;
import ar.com.patronesdisenio.proxy.interfaces.IDocumento;

/**
* @author nconde
*/
public class DocumentoProxy implements IDocumento {

Documento doc = new Documento();
@Override
public void acceder(String usuario) {
if ("".equals(usuario)) {
System.out.println("Usuario sin permisos");
} else {
doc.acceder(usuario);
}

}
@Override
public void cargarImagen(Integer pagina) {
if (2 != pagina) {
System.out.println("Luego se cargara la imagen");
} else {
doc.cargarImagen(pagina);
}
}
}



Cliente:
package ar.com.patronesdisenio.proxy.main;
import ar.com.patronesdisenio.proxy.imp.DocumentoProxy;

/**
* @author nconde
*/
public class Cliente {

public static void main(String[] args) {
DocumentoProxy dp = new DocumentoProxy();
dp.acceder("");
dp.cargarImagen(new Integer(1));
}

}





Patrones de Diseño - Patrón Proxy/ Representante - ¿Que es el Patrón de Diseño Proxy? Patrones de Diseño - Patrón Proxy/ Representante - ¿Que es el Patrón de Diseño Proxy? Reviewed by El lado oscuro de java on octubre 17, 2014 Rating: 5

No hay comentarios:

Con la tecnología de Blogger.