suchen
HeimWeb-Frontendjs-TutorialProxy-Entwurfsmuster

Proxy-Entwurfsmuster

Oct 19, 2024 pm 12:36 PM

Proxy Design Pattern

In meinen vorherigen Blogs habe ich verschiedene kreative Designmuster untersucht, die sich mit Objekterstellungsmechanismen befassen. Jetzt ist es an der Zeit, sich mit strukturellen Entwurfsmustern zu befassen, die sich darauf konzentrieren, wie Objekte und Klassen zusammengesetzt werden, um größere Strukturen zu bilden und sie gleichzeitig flexibel und effizient zu halten. Beginnen wir mit dem Proxy-Entwurfsmuster

Proxy-Entwurfsmuster in JavaScript

Das Proxy-Entwurfsmuster ist ein strukturelles Entwurfsmuster, das ein Objekt bereitstellt, das ein anderes Objekt darstellt. Es fungiert als Vermittler, der den Zugriff auf das reale Objekt steuert und zusätzliches Verhalten wie verzögerte Initialisierung, Protokollierung, Zugriffskontrolle oder Caching hinzufügt, ohne den Code des ursprünglichen Objekts zu ändern.

In JavaScript sind Proxys integrierte Funktionen, die vom Proxy-Objekt bereitgestellt werden und es Ihnen ermöglichen, benutzerdefiniertes Verhalten für grundlegende Vorgänge wie Eigenschaftenzugriff, Zuweisung, Funktionsaufruf usw. zu definieren.

Wann brauchen wir das Proxy-Muster?

Das Proxy-Muster ist besonders nützlich, wenn:

  • Verzögerte Initialisierung: Sie möchten die Erstellung eines ressourcenintensiven Objekts verzögern, bis es benötigt wird.
  • Zugriffskontrolle: Sie müssen den Zugriff auf ein Objekt kontrollieren, um beispielsweise den unbefugten Zugriff einzuschränken oder Vorgänge basierend auf Bedingungen einzuschränken.
  • Protokollierung: Sie möchten Aktionen an einem Objekt protokollieren (z. B. Eigenschaftszugriff oder Methodenaufrufe).
  • Caching: Sie möchten das Ergebnis teurer Vorgänge zwischenspeichern, um redundante Berechnungen zu vermeiden.

Komponenten des Proxy-Musters

  1. Betreff: Die Schnittstelle, die die gemeinsamen Operationen sowohl für das reale Objekt als auch für den Proxy definiert.
  2. RealSubject: Das tatsächliche Objekt, das die eigentliche Arbeit ausführt.
  3. Proxy: Der Vermittler, der den Zugriff auf das RealSubject steuert.

Analogie:

Stellen Sie sich vor, Sie haben ein großes Gemälde, das Sie Ihren Gästen zeigen möchten, aber es kostet viel Zeit, es aus einem Lagerraum herauszuholen (weil es schwer ist und Zeit zum Tragen braucht). Anstatt jedes Mal darauf zu warten, entscheiden Sie sich dafür, ein kleines Postkartenbild des Gemäldes zu verwenden, um es ihnen schnell zu zeigen, während sie darauf warten, dass das eigentliche Gemälde abgeholt wird.

In dieser Analogie:

  • Das große Gemälde ist das eigentliche Objekt (wie ein Bild, dessen Laden Zeit braucht).
  • Die Postkarte ist der Stellvertreter (ein leichter Ersatz, der so lange dasteht, bis das reale Objekt fertig ist).
  • Sobald das echte Gemälde fertig ist, zeigen Sie es Ihren Gästen.

Analogie zur realen Welt:

Stellen Sie sich einen Immobilienmakler als Stellvertreter vor. Wenn Sie ein Haus kaufen möchten, besuchen Sie nicht sofort jedes Haus (Laden des realen Objekts). Stattdessen zeigt Ihnen der Immobilienmakler (Proxy) zunächst Fotos und Beschreibungen. Erst wenn Sie zum Kauf bereit sind (d. h. wenn Sie display() aufrufen), arrangiert der Agent einen Hausbesuch (lädt das reale Objekt).

Beispiel aus der Praxis: Laden von Bildern (virtueller Proxy)

Nehmen wir das Beispiel des Ladens von Bildern in einer Webanwendung, bei der wir das Laden des Bildes verzögern möchten, bis der Benutzer es anfordert (Lazy Loading). Ein Proxy kann als Platzhalter fungieren, bis das echte Bild geladen wird.

So können Sie das Proxy-Entwurfsmuster in JavaScript implementieren.

Beispiel: Proxy zum Laden von Bildern

// Step 1: The real object
class RealImage {
  constructor(filename) {
    this.filename = filename;
    this.loadImageFromDisk();
  }

  loadImageFromDisk() {
    console.log(`Loading ${this.filename} from disk...`);
  }

  display() {
    console.log(`Displaying ${this.filename}`);
  }
}

// Step 2: The proxy object
class ProxyImage {
  constructor(filename) {
    this.realImage = null; // no real image yet
    this.filename = filename;
  }

  display() {
    if (this.realImage === null) {
      // load the real image only when needed
      this.realImage = new RealImage(this.filename);
    }
    this.realImage.display(); // display the real image
  }
}

// Step 3: Using the proxy to display the image
const image = new ProxyImage("photo.jpg");
image.display(); // Loads and displays the image
image.display(); // Just displays the image (already loaded)

Erklärung:

1). Das wahre Bild:

  • Die RealImage-Klasse repräsentiert das tatsächliche Bild.
  • Es nimmt einen Dateinamen als Eingabe und simuliert den zeitaufwändigen Prozess des Ladens des Bildes von der Festplatte (dargestellt durch die Methode „loadImageFromDisk“).
  • Nach dem Laden wird die Anzeigemethode verwendet, um das Bild anzuzeigen.

2). Das Proxy-Bild:

  • Die ProxyImage-Klasse fungiert als Ersatz für RealImage. Das echte Bild wird nicht sofort geladen.
  • Es enthält einen Verweis auf das reale Bild (aber zunächst ist es null, da das reale Bild noch nicht geladen wurde).
  • Wenn Sie die Anzeigemethode auf dem Proxy aufrufen, prüft sie, ob das echte Bild geladen wurde. Wenn nicht, wird es zuerst geladen und dann angezeigt.

3). Verwendung:

  • Wenn wir eine Instanz von ProxyImage erstellen, wird das eigentliche Bild noch nicht geladen (da es ressourcenintensiv ist).
  • Beim ersten Aufruf von display lädt der Proxy das Bild (unter Verwendung der RealImage-Klasse) und zeigt es dann an.
  • Beim zweiten Aufruf von display wurde das echte Bild bereits geladen, sodass nur das Bild angezeigt wird, ohne es erneut zu laden.

Das integrierte Proxy-Objekt

Der ES6-Proxy besteht aus einem Proxy-Konstruktor, der ein Ziel und einen Handler als Argumente akzeptiert

const proxy = new Proxy(target, handler)

Ziel stellt hier das Objekt dar, auf das der Proxy angewendet wird, während Handler ein spezielles Objekt ist, das das Verhalten des Proxys definiert.

Das Handler-Objekt enthält eine Reihe optionaler Methoden mit vordefinierten Namen, die als Trap-Methoden bezeichnet werden (zum Beispiel apply,get,set und has), die automatisch aufgerufen werden, wenn die entsprechenden Vorgänge auf der Proxy-Instanz ausgeführt werden.

Lassen Sie uns dies verstehen, indem wir den Rechner mithilfe des integrierten Proxys implementieren

// Step 1: The real object
class RealImage {
  constructor(filename) {
    this.filename = filename;
    this.loadImageFromDisk();
  }

  loadImageFromDisk() {
    console.log(`Loading ${this.filename} from disk...`);
  }

  display() {
    console.log(`Displaying ${this.filename}`);
  }
}

// Step 2: The proxy object
class ProxyImage {
  constructor(filename) {
    this.realImage = null; // no real image yet
    this.filename = filename;
  }

  display() {
    if (this.realImage === null) {
      // load the real image only when needed
      this.realImage = new RealImage(this.filename);
    }
    this.realImage.display(); // display the real image
  }
}

// Step 3: Using the proxy to display the image
const image = new ProxyImage("photo.jpg");
image.display(); // Loads and displays the image
image.display(); // Just displays the image (already loaded)

Das Beste daran ist, den Proxy auf diese Weise zu verwenden:

  • Das Proxy-Objekt erbt den Prototyp der ursprünglichen Calculator-Klasse.
  • Mutationen werden durch die gesetzte Falle des Proxys vermieden.

Erläuterung des Kodex

1). Prototyp-Vererbung:

  • Der Proxy beeinträchtigt nicht den ursprünglichen Prototyp der **Calculator **-Klasse.
  • Dies wird bestätigt, indem überprüft wird, ob proxiedCalculator.proto === Calculator.prototype. Das Ergebnis wird wahr sein.

2). Verarbeitung von getOperations:

  • Die Get-Trap fängt den Eigenschaftszugriff auf das Proxy-Objekt ab.
  • Wir verwenden Reflect.get, um sicher auf Eigenschaften und Methoden des Originalobjekts zuzugreifen.

3). Mutationen verhindern:

Die Set-Trap löst immer dann einen Fehler aus, wenn versucht wird, eine Eigenschaft des Zielobjekts zu ändern. Dies gewährleistet Unveränderlichkeit.

4). Verwendung von Prototypmethoden über den Proxy:

Der Proxy ermöglicht den Zugriff auf Methoden wie Addieren, Subtrahieren, Multiplizieren und Dividieren, die alle im Prototyp des Originalobjekts definiert sind.

Wichtige Punkte, die es hier zu beachten gilt:

  • Behält die Prototypenvererbung bei:Der Proxy behält den Zugriff auf alle Prototypmethoden, sodass er sich wie der ursprüngliche Rechner verhält.
  • Verhindert Mutation: Die Set-Trap stellt sicher, dass der interne Zustand des Taschenrechnerobjekts nicht unerwartet geändert werden kann.
  • Sicherer Zugriff auf Eigenschaften und Methoden: Die Get-Trap stellt sicher, dass nur auf gültige Eigenschaften zugegriffen wird, was die Robustheit verbessert.

Wenn Sie es bis hierher geschafft haben, vergessen Sie nicht, auf „Gefällt mir“ zu klicken und unten einen Kommentar mit Fragen oder Gedanken zu hinterlassen. Ihr Feedback bedeutet mir sehr viel und ich würde gerne von Ihnen hören!

Das obige ist der detaillierte Inhalt vonProxy-Entwurfsmuster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Jenseits des Browsers: JavaScript in der realen WeltJenseits des Browsers: JavaScript in der realen WeltApr 12, 2025 am 12:06 AM

Zu den Anwendungen von JavaScript in der realen Welt gehören die serverseitige Programmierung, die Entwicklung mobiler Anwendungen und das Internet der Dinge. Die serverseitige Programmierung wird über node.js realisiert, die für die hohe gleichzeitige Anfrageverarbeitung geeignet sind. 2. Die Entwicklung der mobilen Anwendungen erfolgt durch reaktnative und unterstützt die plattformübergreifende Bereitstellung. 3.. Wird für die Steuerung von IoT-Geräten über die Johnny-Five-Bibliothek verwendet, geeignet für Hardware-Interaktion.

Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Erstellen einer SaaS-Anwendung mit mehreren Mietern mit Next.js (Backend Integration)Apr 11, 2025 am 08:23 AM

Ich habe eine funktionale SaaS-Anwendung mit mehreren Mandanten (eine EdTech-App) mit Ihrem täglichen Tech-Tool erstellt und Sie können dasselbe tun. Was ist eine SaaS-Anwendung mit mehreren Mietern? Mit Multi-Tenant-SaaS-Anwendungen können Sie mehrere Kunden aus einem Sing bedienen

So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)So erstellen Sie eine SaaS-Anwendung mit mehreren Mietern mit Next.js (Frontend Integration)Apr 11, 2025 am 08:22 AM

Dieser Artikel zeigt die Frontend -Integration mit einem Backend, das durch die Genehmigung gesichert ist und eine funktionale edtech SaaS -Anwendung unter Verwendung von Next.js. erstellt. Die Frontend erfasst Benutzerberechtigungen zur Steuerung der UI-Sichtbarkeit und stellt sicher, dass API-Anfragen die Rollenbasis einhalten

JavaScript: Erforschung der Vielseitigkeit einer WebspracheJavaScript: Erforschung der Vielseitigkeit einer WebspracheApr 11, 2025 am 12:01 AM

JavaScript ist die Kernsprache der modernen Webentwicklung und wird für seine Vielfalt und Flexibilität häufig verwendet. 1) Front-End-Entwicklung: Erstellen Sie dynamische Webseiten und einseitige Anwendungen durch DOM-Operationen und moderne Rahmenbedingungen (wie React, Vue.js, Angular). 2) Serverseitige Entwicklung: Node.js verwendet ein nicht blockierendes E/A-Modell, um hohe Parallelitäts- und Echtzeitanwendungen zu verarbeiten. 3) Entwicklung von Mobil- und Desktop-Anwendungen: Die plattformübergreifende Entwicklung wird durch reaktnative und elektronen zur Verbesserung der Entwicklungseffizienz realisiert.

Die Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenDie Entwicklung von JavaScript: Aktuelle Trends und ZukunftsaussichtenApr 10, 2025 am 09:33 AM

Zu den neuesten Trends im JavaScript gehören der Aufstieg von Typenkripten, die Popularität moderner Frameworks und Bibliotheken und die Anwendung der WebAssembly. Zukunftsaussichten umfassen leistungsfähigere Typsysteme, die Entwicklung des serverseitigen JavaScript, die Erweiterung der künstlichen Intelligenz und des maschinellen Lernens sowie das Potenzial von IoT und Edge Computing.

Entmystifizieren JavaScript: Was es tut und warum es wichtig istEntmystifizieren JavaScript: Was es tut und warum es wichtig istApr 09, 2025 am 12:07 AM

JavaScript ist der Eckpfeiler der modernen Webentwicklung. Zu den Hauptfunktionen gehören eine ereignisorientierte Programmierung, die Erzeugung der dynamischen Inhalte und die asynchrone Programmierung. 1) Ereignisgesteuerte Programmierung ermöglicht es Webseiten, sich dynamisch entsprechend den Benutzeroperationen zu ändern. 2) Die dynamische Inhaltsgenerierung ermöglicht die Anpassung der Seiteninhalte gemäß den Bedingungen. 3) Asynchrone Programmierung stellt sicher, dass die Benutzeroberfläche nicht blockiert ist. JavaScript wird häufig in der Webinteraktion, der einseitigen Anwendung und der serverseitigen Entwicklung verwendet, wodurch die Flexibilität der Benutzererfahrung und die plattformübergreifende Entwicklung erheblich verbessert wird.

Ist Python oder JavaScript besser?Ist Python oder JavaScript besser?Apr 06, 2025 am 12:14 AM

Python eignet sich besser für Datenwissenschaft und maschinelles Lernen, während JavaScript besser für die Entwicklung von Front-End- und Vollstapel geeignet ist. 1. Python ist bekannt für seine prägnante Syntax- und Rich -Bibliotheks -Ökosystems und ist für die Datenanalyse und die Webentwicklung geeignet. 2. JavaScript ist der Kern der Front-End-Entwicklung. Node.js unterstützt die serverseitige Programmierung und eignet sich für die Entwicklung der Vollstapel.

Wie installiere ich JavaScript?Wie installiere ich JavaScript?Apr 05, 2025 am 12:16 AM

JavaScript erfordert keine Installation, da es bereits in moderne Browser integriert ist. Sie benötigen nur einen Texteditor und einen Browser, um loszulegen. 1) Führen Sie sie in der Browser -Umgebung durch, indem Sie die HTML -Datei durch Tags einbetten. 2) Führen Sie die JavaScript -Datei nach dem Herunterladen und Installieren von node.js nach dem Herunterladen und Installieren der Befehlszeile aus.

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SublimeText3 Linux neue Version

SublimeText3 Linux neue Version

SublimeText3 Linux neueste Version

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor