私はリフレクションの概念を学び、「JavaReflectionInaction」の本を読んでいます。「プロキシ」の章から始めたところです。「プロキシは、別のオブジェクト、そのターゲットのインターフェイスをサポートしているため、プロキシはすべての実用的な目的でターゲットの代わりに使用できます」と書かれています。
このプロキシの概念を理解するための実際の簡単な例を教えてもらえますか?
私はリフレクションの概念を学び、「JavaReflectionInaction」の本を読んでいます。「プロキシ」の章から始めたところです。「プロキシは、別のオブジェクト、そのターゲットのインターフェイスをサポートしているため、プロキシはすべての実用的な目的でターゲットの代わりに使用できます」と書かれています。
このプロキシの概念を理解するための実際の簡単な例を教えてもらえますか?
典型的な例はRMIプロキシで、ローカルプロキシオブジェクトでメソッド呼び出しを行うと、別のマシンの別のJVMにあるプロキシオブジェクトでメソッドが呼び出されます。
プロキシを使用すると、呼び出し元はリモートオブジェクトをローカルオブジェクトであるかのように扱うことができます...ほとんどの点で。
まあ、プロキシは単なるメカニズムであり、さまざまなことを行うことができ、多くのフレームワークがそれらをさまざまな方法で使用します。
ただし、プロキシを使用できる「従来の」領域は次のとおりです。
注:これらの領域にはいくつかの重複があります。
論文「ECMAScriptReflectionAPIの設計について」では、著者は2つの主要な種類のプロキシを区別しています。
汎用ラッパー。同じアドレス空間で他のオブジェクトをラップするプロキシ。例としては、アクセス制御ラッパー(たとえば、取り消し可能な参照)、高次の契約[Findler and Felleisen 2002]、プロファイリング、汚染追跡などがあります。
仮想オブジェクト。エミュレートされたオブジェクトが同じアドレス空間に存在する必要なしに、他のオブジェクトをエミュレートするプロキシ。例としては、リモートオブジェクトプロキシ(他のアドレス空間のオブジェクトをエミュレートする)、永続オブジェクト(データベースに格納されているオブジェクトをエミュレートする)、透過的なフューチャー(まだ計算されていないオブジェクトをエミュレートする)、遅延インスタンス化されたオブジェクト、テストモックアップなどがあります。
私が前に説明した領域を多かれ少なかれカバーしていると思います。しかし、リストは完全ではありません。プロキシの固定ケースはありません。これは一般的なメカニズムまたは原則です。