Documente Academic
Documente Profesional
Documente Cultură
ARQUITECTURA EN PIPELINE
INDICE
DEDICATORIA ............................................................................................... 2
INTRODUCCIÓN ............................................................................................ 3
CÓDIGO ........................................................................................................... 9
CONCLUSIONES .......................................................................................... 10
DEDICATORIA
INTRODUCCIÓN
El presente documento aborda uno de los patrones estructurales del grupo de los cuatro (GOF), el
patrón Proxy, el cual según Erich Gamma su propósito es proporcionar un sustituto de un determinado
También esta investigación presenta la problemática a la cual es aplicable y la solución que propone
el patrón estructural Proxy incluyendo diagramas de clases y abordamos la responsabilidad que este
MARCO TEÓRICO
CAPITULO I:
EL PATRÓN 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.
4
ARQUITECTURA EN PIPELINE
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.
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.
PROPOSITO
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 son visibles.
Solución:
5
ARQUITECTURA EN PIPELINE
ESTRUCTURA
CAPITULO II:
6
ARQUITECTURA EN PIPELINE
CARACTERISTICAS
Proporciona soluciones técnicas para la utilización de las cargas de objetos de gran tamaño.
CAPITULO III:
APLICABILIDAD
El patrón proxy se usa cuando se necesita una referencia a in objeto más flexible o sofisticado que un
puntero. Algunas situaciones comunes de aplicación son:
Proxy virtual: Crea objetos costosos por encargo (como la clase ImageProxy en el ejemplo de
motivación).
cuando se accede a un objeto (ej. contar el número de referencias, cargar un objeto persistente en
PARTICIPANTES
La clase Proxy:Mantiene una referencia al objeto real (en el siguiente ejemplo se le denomina
_sujetoReal) y proporciona una interfaz idéntica al sujeto (la clase Sujeto). Además controla el acceso
a dicho objeto real y puede ser el responsable de su creación y borrado. También tiene otras
responsabilidades que dependen del tipo de proxy:
Proxy (ImageProxy):
7
ARQUITECTURA EN PIPELINE
Subject (Graphic): Define una interfaz común para el proxy y el objeto real, de tal modo que
se puedan usar de manera indistinta.
CAPITULO IV:
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
CAPITULO V:
Ventajas:
Proxy virtual guarda información adicional sobre el sujeto, para retardar el acceso al
mismo.
Clase String.
Desventajas:
Un proxy remoto puede ocultar el hecho de que un objeto reside en otro espacio de
direcciones.
Tanto los proxy de protección, como las referencias inteligentes permiten realizar tareas de un
CÓDIGO
CLIENTE:
packagepatronproxy;
importjavax.swing.JFrame;
importjava.awt.Image;
importjava.awt.Graphics;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.FileOutputStream;
importjava.io.IOException;
importjavax.swing.DefaultListModel;
importjavax.swing.JFileChooser;
importjavax.swing.filechooser.FileNameExtensionFilter; public
imagen=null;
10
ARQUITECTURA EN PIPELINE
public Cliente() {
initComponents();
imagen=miImagen.obtenerImagen();
g.drawImage(imagen,110,90, 600,330,this);
filepath.lastIndexOf(System.getProperty("file.separator"));
+1);
; i<this.list.getModel().getSize() ; i++ ){
listModel.addElement(this.list.getModel().getElementAt(i));
listModel.addElement(nomFich);
this.list.setModel(listModel);
11
ARQUITECTURA EN PIPELINE
//-------------------------------------------
list.locationToIndex(evt.getPoint());
ImagenProxy(seleccionaImagen);
repaint();
//<editor-fold defaultstate="collapsed" desc=" Look and feel setting code (optional) "> try
{
for (javax.swing.UIManager.LookAndFeelInfoinfo :
javax.swing.UIManager.getInstalledLookAndFeels()) { if ("Nimbus".equals(info.getName())) {
javax.swing.UIManager.setLookAndFeel(info.getClassName()); break;
java.util.logging.Logger.getLogger(Cliente.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
java.util.logging.Logger.getLogger(Cliente.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
java.util.logging.Logger.getLogger(Cliente.class.getName()).log(java.util.logging.Level.SEVERE,
null, ex);
//</editor-fold> java.awt.EventQueue.invokeLater(new
JFrame.setDefaultLookAndFeelDecorated(true); newCliente().setVisible(true);
});
privatejavax.swing.JButtonbtnCargar;
privatejavax.swing.ButtonGroup buttonGroup1;
privatejavax.swing.JScrollPane jScrollPane1;
privatejavax.swing.JList list;
IMAGEN
packagepatronproxy;
importjava.awt.Image;
13
ARQUITECTURA EN PIPELINE
IMAGENPROXY
packagepatronproxy;
imagen.obtenerImagen();
}}
IMAGEN REAL
packagepatronproxy;
//Este es el objeto real (SubjectReal)
importjava.awt.Image;
importjava.awt.image.BufferedImage;
importjava.io.IOException;
importjavax.imageio.ImageIO;
14
ARQUITECTURA EN PIPELINE
privateBufferedImageimagen;
publicImagenReal(String nombreImagen){
cargarImagen(nombreImagen);
publicImageobtenerImagen() { return
(Image)imagen;
ImageIO.read(getClass().getClassLoader().getResource("Imagenes\\"+ nombre));
}catch(IOException e){
PATRONES PROXY
packagepatronproxy;
importjavax.swing.JOptionPane;
importorg.jvnet.substance.SubstanceLookAndFeel;
importorg.jvnet.substance.watermark.SubstanceImageWatermark;
// TODO codeapplicationlogichere
try {
Cliente.setDefaultLookAndFeelDecorated(true);
SubstanceLookAndFeel.setSkin("org.jvnet.substance.skin.MagmaSkin");
SubstanceLookAndFeel.setCurrentTheme("org.jvnet.substance.theme.SubstanceLightAquaTheme")
;
c = new Cliente();
c.setVisible(true);
} catch (Exception e) {
JOptionPane.showMessageDialog(null,"Ocurrio un
error..."+e.getMessage(),"Mensaje",JOptionPane.ERROR);
CONCLUSIONES
cargarse, por ejemplo cargar una imagen que consume demasiada memoria.
acceso a éste.
16
ARQUITECTURA EN PIPELINE
REFERENCIA BIBLIOGRAFICA
http://www.ciberaula.com/articulo/patron_proxy/
http://patronesdediseno.blogspot.com/2009/05/patron-proxy.html
http://es.wikipedia.org/wiki/Proxy
http://arantxa.ii.uam.es/~eguerra/docencia/0708/11%20Proxy.pdf
http://modelosprogramacion.blogspot.com/2009/05/proxy.html
http://www.slideshare.net/maitin30/patron-de-diseo-proxy