7

プロキシ パターンと動的プロキシ パターンの違いを理解しようとしています。これまで読んだことからわかったことは、プロキシ クラスのバイトコードがコンパイル時に作成され、動的プロキシでは実行時に作成されるということだけです。私が見逃している別の違いはありますか?そうでない場合、動的プロキシよりもプロキシを優先する理由は何ですか (パフォーマンスの問題を除く)

4

2 に答える 2

15

動的プロキシは、基本的にプロキシ デザイン パターンであり、実行時にプロキシ オブジェクトが動的に作成されます。

プロキシ設計パターンはプロキシを使用します。これは、クライアントと基礎となる実オブジェクトの間のメディエーターとして機能します。プログラマーは、リクエストを実際のオブジェクトに委任する前に、プロキシでアクセス制御、検証、および追加のアクションを実行できます。

ここで、任意のクラスのメソッドを呼び出す前に、一般的なアクションを実行する必要があるとします。たとえば、クライアントによって行われたすべてのメソッド呼び出しのログを保持したいとします。その場合、プロキシ設計パターンを実装する場合は、次の手順に従います。

  1. 各クラスのプロキシ クラスを作成します。
  2. 実際のオブジェクトへの呼び出しをデリゲートするよりも、最初にクライアントによって行われたメソッド呼び出しのログ エントリを作成する方法でプロキシ クラスを実装します。

上記の手法の問題は、1000 個のクラスがあると仮定すると、クラスごとに 1000 個のプロキシ クラスを記述し、すべてのクラスにすべてのメソッドを実装する必要があり、基本的に同じことを行う (この場合はログ記録アクションを実行する) ことです。これは非常に面倒なプロセスであり、メモリの浪費です。

どういうわけか、実行時に、クライアントの呼び出しに基づいてプロキシ オブジェクトを作成し、呼び出しを実際のオブジェクトに委譲する前に一般的なアクション (この場合はログ アクション) を実行できれば、それはより良いことではないでしょうか。プロキシが行います。

動的プロキシの場合のプロセスは次のとおりです。

  1. クライアントは、オブジェクトに対して何らかのアクションを呼び出します。
  2. システムは、クライアントの呼び出しに基づいて実行時にプロキシ オブジェクトを作成します。
  3. プロキシ オブジェクトは、各呼び出しの場合にジェネリック アクションを実行するジェネリック メソッドを呼び出します。
  4. アクションの後、プロキシ オブジェクトは実オブジェクトへの呼び出しを委譲します。

簡単に言えば、実行する一般的なアクションがある場合は動的プロキシを使用しますが、各クラスを異なる方法で処理したい場合 (一部のクラスではログ記録を実行し、一部のクラスではログを実行せず、一部のアクセス制御などで)、シンプルを使用します。プロキシー。私が助けてくれることを願っています。コード例が必要な場合は、お知らせください。

于 2014-05-27T07:13:44.180 に答える