Proxy-Muster
Das Proxy-Muster stellt einen Stellvertreter für ein anderes Objekt bereit, um den Zugriff darauf zu kontrollieren. Verwende es für verzögerte Initialisierung, Zugriffskontrolle, Caching oder Remote-Aufrufe — Situationen, in denen du Aufrufe abfangen willst, ohne das echte Objekt zu ändern.
Überblick
Das Proxy-Muster platziert einen Stellvertreter zwischen Aufrufer und echtem Objekt. Der Proxy implementiert dieselbe Schnittstelle, sodass Aufrufer nicht bemerken, dass er existiert, aber er kann die Erstellung verzögern, Berechtigungen erzwingen, Aufrufe protokollieren, Ergebnisse cachen oder die Anfrage übers Netzwerk weiterleiten. JavaScript bringt sogar einen eingebauten Proxy für dieselbe Idee auf Sprachebene mit.
Wann verwenden
- Das echte Objekt ist teuer zu erstellen und du willst eine verzögerte Initialisierung (virtueller Proxy).
- Du musst Berechtigungen erzwingen oder Zugriffe prüfen, bevor delegiert wird (Schutz-Proxy).
- Das echte Objekt lebt anderswo — in einem anderen Prozess oder Dienst — und du willst einen lokalen Stellvertreter (Remote-Proxy).
Beispiel
interface Image {
display(): void;
}
class RealImage implements Image {
constructor(private readonly filename: string) {
console.log(`Lade ${filename} von der Festplatte`);
}
display() { console.log(`Zeige ${this.filename}`); }
}
class ImageProxy implements Image {
private real?: RealImage;
constructor(private readonly filename: string) {}
display() {
if (!this.real) this.real = new RealImage(this.filename);
this.real.display();
}
}
const image: Image = new ImageProxy("photo.png");
image.display(); // lädt + zeigt
image.display(); // nur zeigtVorteile
- Fügt Verhalten (Lazy Load, Auth, Cache) hinzu, ohne das echte Objekt oder den Client zu ändern.
- Das echte Objekt bleibt einfach — übergreifende Anliegen leben im Proxy.
- Ermöglicht Remote- und verteilte Designs, ohne Transportdetails offenzulegen.
Nachteile
- Eine zusätzliche Schicht, die das Team beim Debuggen kennen muss.
- Wenn die Proxy-Logik komplex wird (Cache-Invalidierung, Retries), kann sie vom Vertrag des echten Objekts abweichen.
- Mehrere verkettete Proxies sind leicht zu schreiben, aber schwer nachzuvollziehen.