# Proxy Pattern - Verständnisfrage



## mhamp (10. Nov 2010)

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_

```
public interface Graphic
{
    public void showImage();
}
```

_ImageProxy.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_

```
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?


----------



## Gast2 (11. Nov 2010)

Stellvertreter (Entwurfsmuster) ? Wikipedia

Bevor du ein Design Pattern anwendest sollest du dir erst einmal bewusst machen warum du es benutzen willst?

Also beantwort dir die Frage WARUM benötigst du einen Stellvertreter für ein Image?


----------



## JohannisderKaeufer (12. Nov 2010)

mhamp hat gesagt.:


> 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?



Nein, du kannst in deiner Image-Klasse das loadImage auch erst in der Methode showImage aufrufen.


----------

