Hallo zusammen!
Ich setze mich zur Zeit etwas mit dem Proxy-Pattern auseinander...
Nun habe ich ein kleines Beispiel, allerdings weiss ich nicht genau ob ich damit wirklich das Proxy-Pattern benutze und ob ich es 100% verstanden habe!
Das Beispiel in Worten:
Das Programm soll Bilder anzeigen, diese sind in einem hochauflösenden Format vorhanden, dadurch dauert das laden ziemlich lange (im Beispiel durch Thread.sleep() simuliert).
Jetzt habe ich ein Interface Graphic, eine ImageProxy-Klasse und das "echte" Image.
Graphic.java
ImageProxy.java
Image.java
Ich erstelle nun drei ImageProxy-Objekte.
Die Objekte sind nun im Speicher vorhanden, die Bilder allerdings noch nicht geladen bzw. angezeigt.
Wenn ich das Bild nun laden möchte, dauert es einmal 3 Sekunden zum laden des Bildes und danach 2 Sekunden zum anzeigen. Also insgesamt 5 Sekunden.
Benutze ich jetzt allerdings nicht das ImageProxy sondern die Image-Klasse.
Dauert es bereits beim anlegen der Objekte 3 Sekunden und beim anzeigen nochmal 2 Sekunden.
Liegt der Vorteil des Proxy-Pattern nun darin, das ich die Objekte bereits angelegt habe allerdings die besonders zeitintensiven Methoden des Objekt anlegens und Bild anzeigen erst ausführe, wenn der Benutzer wirklich auf die Bilder zugreifen möchte?
Ich setze mich zur Zeit etwas mit dem Proxy-Pattern auseinander...
Nun habe ich ein kleines Beispiel, allerdings weiss ich nicht genau ob ich damit wirklich das Proxy-Pattern benutze und ob ich es 100% verstanden habe!
Das Beispiel in Worten:
Das Programm soll Bilder anzeigen, diese sind in einem hochauflösenden Format vorhanden, dadurch dauert das laden ziemlich lange (im Beispiel durch Thread.sleep() simuliert).
Jetzt habe ich ein Interface Graphic, eine ImageProxy-Klasse und das "echte" Image.
Graphic.java
Java:
public interface Graphic
{
public void showImage();
}
ImageProxy.java
Java:
public class ImageProxy implements Graphic
{
private String imagePath;
private Image myImage = null;
public ImageProxy(String imagePath)
{
this.imagePath = imagePath;
}
@Override
public void showImage()
{
if(this.myImage == null)
{
System.out.println("ImageProxy: Erzeuge echtes Image...");
this.myImage = new Image(this.imagePath);
}
System.out.println("ImageProxy: Bild wird angezeigt...");
this.myImage.showImage();
}
}
Image.java
Java:
public class Image implements Graphic
{
public Image(String imagePath)
{
this.loadImage(imagePath);
System.out.println("Image: Objekt wurde erzeugt...");
}
private void loadImage(String imagePath)
{
// Lade das Bild
// Dauer 3 Sekunden
try
{
Thread.sleep(3000);
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
System.out.println("Image: Bild wurde geladen... (3 Sekunden)");
}
@Override
public void showImage()
{
// Anzeigen des Bildes
// Dauer 2 Sekunden
try
{
Thread.sleep(2000);
}
catch(Exception ex)
{
System.out.println(ex.getMessage());
}
System.out.println("Image: Bild wurde angezeigt... (2 Sekunden)");
}
}
Ich erstelle nun drei ImageProxy-Objekte.
Die Objekte sind nun im Speicher vorhanden, die Bilder allerdings noch nicht geladen bzw. angezeigt.
Wenn ich das Bild nun laden möchte, dauert es einmal 3 Sekunden zum laden des Bildes und danach 2 Sekunden zum anzeigen. Also insgesamt 5 Sekunden.
Benutze ich jetzt allerdings nicht das ImageProxy sondern die Image-Klasse.
Dauert es bereits beim anlegen der Objekte 3 Sekunden und beim anzeigen nochmal 2 Sekunden.
Liegt der Vorteil des Proxy-Pattern nun darin, das ich die Objekte bereits angelegt habe allerdings die besonders zeitintensiven Methoden des Objekt anlegens und Bild anzeigen erst ausführe, wenn der Benutzer wirklich auf die Bilder zugreifen möchte?