Heim > Web-Frontend > js-Tutorial > Hauptteil

Designmuster # Adaptermuster

WBOY
Freigeben: 2024-07-18 01:27:31
Original
1003 Leute haben es durchsucht

Design Pattern # Adapter Pattern

In den letzten Wochen habe ich einige der trendigen Designmuster geteilt, wie die PubSub- und die Singleton-Muster. Heute werde ich einen weiteren Artikel dieser Serie veröffentlichen, aber bitte kommentieren Sie unten und sagen Sie mir, welches Designmuster ich als nächstes behandeln soll!

Das Adaptermuster

Das Adaptermuster ist ein strukturelles Entwurfsmuster, das die Zusammenarbeit von Objekten mit inkompatiblen Schnittstellen ermöglicht. Es wird häufig verwendet, wenn Sie vorhandene Klassen mit anderen zusammenarbeiten lassen möchten, ohne deren Quellcode zu ändern. Dieses Muster ist besonders nützlich, wenn die Schnittstelle einer vorhandenen Klasse nicht mit der von Ihnen benötigten übereinstimmt.

Reales Fallszenario

Betrachten wir ein Beispiel aus dem wirklichen Leben. Sie wurden damit beauftragt, einen Videoplayer eines Drittanbieters in Ihre Anwendung zu integrieren. Allerdings funktioniert der Videoplayer anders und verfügt über eine andere Methodenschnittstelle als von Ihrer Anwendung erwartet. In diesem Fall könnten Sie das Adaptermuster verwenden, um eine Wrapper-Klasse um den Videoplayer herum zu erstellen und so den Code von Drittanbietern mit Ihrem vorhandenen Anwendungscode kompatibel zu machen.

Hier ist der Code, den Sie in diesem Fall verwenden würden:

// Adapter class
class VideoPlayerAdapter {
    constructor() {
        this.externalPlayer = new ThirdPartyVideoPlayer({
            // some configuration
        });
    }

    play() {
        const video = this.externalPlayer.getVideo();
        this.externalPlayer.playVideo(video, {
            // additional parameters
        });
    }
}

// Your application code
class Application {
    constructor() {
        this.videoPlayer = new VideoPlayerAdapter();
    }

    start() {
        // Play video using your application code
        this.videoPlayer.play();
    }
}

Nach dem Login kopieren

Lassen Sie uns den obigen Code aufschlüsseln:

  1. ThirdPartyVideoPlayer ist eine hypothetische externe Bibliothek, die Ihre Anwendung verwenden möchte. Allerdings ist die Schnittstelle möglicherweise nicht mit Ihrer Anwendung kompatibel.
  2. VideoPlayerAdapter ist die Adapterklasse. Es umschließt den ThirdPartyVideoPlayer. Die Schnittstelle des Adapters ist mit Ihrer Anwendung kompatibel. Wenn die play()-Methode des Adapters aufgerufen wird, ruft sie intern die erforderlichen Methoden für ThirdPartyVideoPlayer auf.
  3. Anwendung ist Ihr Anwendungscode. Es erstellt eine Instanz von VideoPlayerAdapter und verwendet sie wie einen normalen Videoplayer. Wenn er die Methode play() auf dem Adapter aufruft, übersetzt der Adapter dies in die entsprechenden Aufrufe von ThirdPartyVideoPlayer.

Auf diese Weise muss die Application-Klasse nichts über die Funktionsweise von ThirdPartyVideoPlayer wissen. Wenn Sie ThirdPartyVideoPlayer jemals durch eine andere Bibliothek ersetzen müssen, müssen Sie nur einen neuen Adapter schreiben – die Application-Klasse kann gleich bleiben. Dies ist der Hauptvorteil des Adaptermusters: Es entkoppelt Ihren Anwendungscode von den Besonderheiten von Bibliotheken Dritter.

Unterschiede zwischen Adaptermuster und Fassadenmuster

Obwohl das Adaptermuster und das Fassadenmuster ähnlich erscheinen mögen, dienen sie unterschiedlichen Zwecken und werden in unterschiedlichen Kontexten verwendet:

  1. Zweck:
    • Adaptermuster: Der Hauptzweck des Adaptermusters besteht darin, zwei inkompatible Schnittstellen miteinander kompatibel zu machen. Dadurch kann eine vorhandene Klasse mit einer anderen Schnittstelle so verwendet werden, als ob sie eine andere Schnittstelle implementiert hätte.
    • Fassadenmuster: Der Hauptzweck des Fassadenmusters besteht darin, eine vereinfachte Schnittstelle zu einem komplexen Subsystem bereitzustellen. Es verbirgt die Komplexität des Subsystems und bietet eine übergeordnete Schnittstelle, die die Verwendung des Subsystems erleichtert.
  2. Verwendung:
    • Adaptermuster: Es wird verwendet, wenn Sie eine neue Klasse oder Bibliothek integrieren müssen, die nicht mit der vorhandenen Klasse oder Schnittstelle in Ihrer Anwendung übereinstimmt. Beim Adaptermuster geht es darum, eine bestimmte Schnittstelle an eine erwartete Schnittstelle anzupassen.
    • Fassadenmuster: Es wird verwendet, wenn Sie Interaktionen mit einem komplexen Subsystem vereinfachen möchten. Die Fassade bietet eine unkomplizierte Methode zur Interaktion mit dem System und verbirgt dessen Komplexität.
  3. Design:
    • Adaptermuster: In der Regel wird eine neue Klasse (der Adapter) erstellt, die die vom Client erwartete Schnittstelle implementiert und Aufrufe an die angepasste Klasse übersetzt.
    • Fassadenmuster: Beinhaltet die Erstellung einer Fassadenklasse, die dem Client vereinfachte Methoden bereitstellt und häufig mehrere Funktionalitäten aus dem Subsystem zusammenfasst.

Zusammenfassend lässt sich sagen, dass beide Muster eine Möglichkeit bieten, mit vorhandenem Code zu arbeiten, das Adaptermuster konzentriert sich jedoch auf die Schnittstellenkompatibilität, während sich das Fassadenmuster auf die Vereinfachung der Interaktion mit einem komplexen System konzentriert.

Super-Einladung – Gewinnen Sie 5.000 $

Während Sie hier sind, möchte ich Sie einladen, an unserem kommenden Superthis August teilzunehmen!

Diese Remote-Veranstaltung gibt Ihnen die Möglichkeit, Ihre Fähigkeiten und Kreativität unter Beweis zu stellen, indem Sie sich der Herausforderung stellen, Ihre virtuellen Interaktionen mit unseren Echtzeit-Kommunikationstools zu transformieren. Bei SuperViz haben Sie die Chance, einen Preis von 5.000 $ zu gewinnen.

Registrieren Sie sich jetzt, um Updates, Tipps und Ressourcen zu erhalten und machen Sie sich bereit zum Hacken!

Das obige ist der detaillierte Inhalt vonDesignmuster # Adaptermuster. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:dev.to
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage