デザインパターン # アダプターパターン

WBOY
リリース: 2024-07-18 01:27:31
オリジナル
1002 人が閲覧しました

Design Pattern # Adapter Pattern

過去数週間にわたって、PubSub や Singleton などのトレンドのデザイン パターンのいくつかを共有してきました。今日は、このシリーズのもう 1 つの記事を共有するつもりですが、以下にコメントして、次にどのデザイン パターンを取り上げるべきか教えてください。

アダプターのパターン

アダプター パターンは、互換性のないインターフェイスを持つオブジェクトの連携を可能にする構造設計パターンです。これは、ソース コードを変更せずに既存のクラスを他のクラスと連携させたい場合によく使用されます。このパターンは、既存のクラスのインターフェイスが必要なインターフェイスと一致しない場合に特に便利です。

実際のケースのシナリオ

実際の例を考えてみましょう。あなたは、サードパーティのビデオ プレーヤーをアプリケーションに統合する任務を負っています。ただし、ビデオ プレーヤーの機能は異なり、アプリケーションが期待するものとは異なるメソッド インターフェイスを持っています。この場合、アダプター パターンを使用してビデオ プレーヤーのラッパー クラスを作成し、サードパーティのコードを既存のアプリケーション コードと互換性を持たせることができます。

この場合に使用するコードは次のとおりです:

// 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();
    }
}

ログイン後にコピー

上記のコードを分解してみましょう:

  1. ThirdPartyVideoPlayer は、アプリケーションが使用する仮想の外部ライブラリです。ただし、そのインターフェイスはアプリケーションと互換性がない可能性があります。
  2. VideoPlayerAdapter はアダプター クラスです。 ThirdPartyVideoPlayer をラップします。アダプターのインターフェースはアプリケーションと互換性があります。アダプターの play() メソッドが呼び出されると、内部的に ThirdPartyVideoPlayer で必要なメソッドが呼び出されます。
  3. アプリケーションはアプリケーションコードです。 VideoPlayerAdapter のインスタンスを作成し、それを通常のビデオ プレーヤーであるかのように使用します。アダプターで play() メソッドを呼び出すと、アダプターはそれを ThirdPartyVideoPlayer への適切な呼び出しに変換します。

この方法では、Application クラスは ThirdPartyVideoPlayer の動作について何も知る必要がありません。 ThirdPartyVideoPlayer を別のライブラリに置き換える必要がある場合は、新しいアダプターを作成するだけで済みます。Application クラスは同じままで構いません。これがアダプタ パターンの主な利点です。つまり、アプリケーション コードをサードパーティ ライブラリの詳細から切り離します。

アダプター パターンとファサード パターンの違い

アダプター パターンとファサード パターンは似ているように見えるかもしれませんが、異なる目的を果たし、異なるコンテキストで使用されます。

  1. 目的:
    • アダプター パターン: アダプター パターンの主な目的は、互換性のない 2 つのインターフェイスを相互に互換性のあるものにすることです。これにより、異なるインターフェイスを持つ既存のクラスを、あたかも別のインターフェイスを実装したかのように使用できるようになります。
    • ファサード パターン: ファサード パターンの主な目的は、複雑なサブシステムに簡素化されたインターフェイスを提供することです。サブシステムの複雑さを隠し、サブシステムを使いやすくする高レベルのインターフェイスを提供します。
  2. 使用法:
    • アダプター パターン: アプリケーション内の既存のクラスまたはインターフェイスと一致しない新しいクラスまたはライブラリを統合する必要がある場合に使用されます。アダプター パターンは、特定のインターフェイスを予想されるインターフェイスに適応させることに関するものです。
    • ファサード パターン: 複雑なサブシステムとの対話を簡素化したい場合に使用されます。ファサードは、システムと対話するための簡単な方法を提供し、その複雑さを隠します。
  3. デザイン:
    • アダプター パターン: 通常、クライアントが期待するインターフェイスを実装し、呼び出しを適応されたクラスに変換する新しいクラス (アダプター) の作成が含まれます。
    • Facade パターン: クライアントに簡略化されたメソッドを提供する Facade クラスの作成が含まれ、多くの場合、サブシステムから複数の機能が集約されます。

要約すると、どちらのパターンも既存のコードを操作する方法を提供しますが、アダプター パターンはインターフェイスの互換性に焦点を当てているのに対し、ファサード パターンは複雑なシステムとの対話を簡素化することに重点を置いています。

スーパー招待 - $5.000 を獲得

それでは、ここにいらっしゃる間、次回の 8 月の Superthis にご参加ください。

このリモート イベントでは、リアルタイム コミュニケーション ツールを使用して仮想インタラクションを変革するという課題に取り組み、スキルと創造性を披露する機会が得られます。 SuperViz を利用すると、賞金 5,000 ドルを獲得するチャンスがあります。

今すぐ登録して最新情報、ヒント、リソースを受け取り、ハッキングの準備をしましょう!

以上がデザインパターン # アダプターパターンの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:dev.to
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート