web-dev-qa-db-ja.com

アダプタパターンとプロキシパターンの正確な違いは何ですか?

私が理解したように、AdapterProxyパターンの両方が2つの異なる/異なるクラスを作成します/ objectsは通信用にそれぞれ互換性があります。そして、両方ともStructuralパターンです。私はそれらの両方が互いにほとんど似ていることを知っています。

正確に何が違うのかを誰かが説明できますか?

編集:私は this 質問を通過しました。しかし、アダプターとプロキシを詳しく比較したいと思います。

13

アダプター:

  1. これにより、2つの無関係なインターフェースが異なるオブジェクトを介して連携し、おそらく同じ役割を果たします。
  2. 元のインターフェースを変更します。

UML図:

enter image description here

このSEの投稿で、実際のコード例を使用してこのパターンの詳細を確認できます。

ブリッジパターンとアダプタパターンの違い

プロキシ:

プロキシは、別のオブジェクトへのアクセスを制御するための代理またはプレースホルダーを提供します。

UML図:

enter image description here

プロキシパターンが適用される一般的な状況があります。

  1. 仮想プロキシは、「作成に費用がかかる」オブジェクトのプレースホルダーです。実際のオブジェクトは、クライアントが最初にオブジェクトを要求/アクセスしたときにのみ作成されます。
  2. リモートプロキシは、異なるアドレス空間に存在するオブジェクトのローカル代表を提供します。これは、RPCおよびCORBAの「スタブ」コードが提供するものです。
  3. 保護プロキシは、機密マスターオブジェクトへのアクセスを制御します。 「代理」オブジェクトは、リクエストを転送する前に、呼び出し元が必要なアクセス許可を持っていることを確認します。
  4. スマートプロキシは、オブジェクトへの参照数の追跡や特定の数に達した場合のアクセスの拒否など、特定のオブジェクトへの高度なアクセスを提供します。オンデマンドでデータベースからメモリにオブジェクトをロードする

動作するコードについては、プロキシに関する tutorialspoint の記事をご覧ください。

主な違い:

  1. Adapterは、そのサブジェクトに対して異なるインターフェースを提供します。プロキシは同じインターフェースを提供します
  2. Adapterは、既存のオブジェクトのインターフェイスを変更することを目的としています

これらのパターンの詳細については、 proxy および adapter の記事のソース作成記事を参照してください。

その他の有用な記事: proxy by dzone

15
Ravindra babu

から ここ

アダプタは、その主題に対して異なるインターフェイスを提供します。プロキシは同じインターフェースを提供します。

アダプタは、直接接続した場合に互換性のない別のものに適合するものと考えることができます。たとえば、海外に旅行するときに、コンセントアダプターが必要な場合。

これで、プロキシは同じインターフェイスのオブジェクトになり、場合によっては同じ基本クラス(またはサブクラス)になります。実際のオブジェクトである(そしてそのように振る舞う)だけで、実際の振る舞い(計算、処理、データアクセスなど)を基になる参照オブジェクトに転送します。

電気的なアナロジーに外挿すると、アダプタの使用がクライアントに表示されても問題ありません。つまり、クライアントはアダプタが使用されていることを「認識」していますが、プロキシの使用はより頻繁に隠されている可能性があります。透過的」-クライアントは実際のオブジェクトが使用されていると考えますが、これはプロキシにすぎません。

2
heltonbiker

アダプタパターンとプロキシパターンの違い

アダプタパターン

  1. インドのモバイル充電器(CLIENT)は、USAスイッチボード(SERVER)に適合しません。
  2. インドのモバイル充電器(CLIENT)がUSAスイッチボード(SERVER)に収まるように、アダプターを使用する必要があります。
  3. ポイント2から、CLIENTがアダプターに直接接続することが理解できます。次に、アダプターはサーバーに接続します。

プロキシパターン

  • アダプターパターンでは、クライアントはアダプターに直接接続します。サーバーに接続しません。
  • プロキシパターンでは、プロキシとサーバーは同じインターフェイスを実装します。クライアントは同じインターフェースを呼び出します。

コードを理解する

class client{
    public void main(){
      //proxy pattern
      IServer iserver = new proxy();
      iserver.invoke();

      //adapter pattern
      IAdapter iadapter = new adapter();
      iserver.iadapter();
    }
}

class server implements IServer{
    public void invoke(){}
}

class proxy implments IServer{
  public void invoke(){}
}

class adapter implements IAdapter{
  public void invoke(){}
}

参照: アダプタパターンとプロキシパターンの違い

0
Siddarth Kanted