EMZETT.
Login

Proxy-Muster

Kurz: Ein Proxy ist ein Stellvertreter-Objekt, das dieselbe Schnittstelle wie das echte Objekt hat und davor sitzt. Er kann den Zugriff prüfen, verzögern, zwischenspeichern oder protokollieren.

Typen

  • Virtueller Proxy (Lazy Loading): Das teure Objekt (großes Bild, Datenbankverbindung) wird erst erzeugt, wenn es wirklich gebraucht wird (Lazy Evaluation).
  • Schutz-Proxy: Prüft vorher, ob der Aufrufer das darf.
  • Cache-Proxy: Merkt sich Ergebnisse (Caching-Strategien, Memoization).
  • Entfernter Proxy: Tut so, als wäre das Objekt lokal, spricht aber übers Netzwerk (RPC, siehe GraphQL und gRPC).
  • Protokoll-Proxy: Zeichnet Aufrufe auf.

Beispiel

class Bild:
    def zeigen(self): ...
 
class EchtesBild(Bild):
    def __init__(self, datei):
        self.daten = lade(datei)        # teuer
    def zeigen(self): zeichne(self.daten)
 
class BildProxy(Bild):
    def __init__(self, datei):
        self.datei, self.echt = datei, None
    def zeigen(self):
        if self.echt is None:           # erst beim ersten Mal laden
            self.echt = EchtesBild(self.datei)
        self.echt.zeigen()

Abgrenzung

Ähnlich wie Decorator-Muster und Adapter verpackt der Proxy ein Objekt, aber mit anderem Ziel: Der Proxy steuert den Zugriff bei gleicher Schnittstelle, der Decorator fügt Funktionen hinzu, der Adapter passt eine andere Schnittstelle an. Nicht verwechseln mit dem Netzwerk-Proxy (Proxy), der nach demselben Gedanken arbeitet.

Siehe auch: Fassade-Muster