デザインパターンのノート11プロキシモード

エージェントモード(プロキシ)

基本的な導入プロキシモード

  1. プロキシモード:このオブジェクトへのアクセスを制御するためのオブジェクトの代替を提供します。そうすることの代理オブジェクトの利点を介してターゲットによってアクセスされていることです:ターゲットオブジェクトに基づいて、対象オブジェクトの機能の拡張の動作を強化するための追加機能で達成することができます。
  2. プロキシオブジェクトは、大きなオーバーヘッドつまたは複数のオブジェクトに必要なセキュリティコントロールを作成、リモートオブジェクトであってもよいです
  3. プロキシモードの異なる形式がありますが、そこにある三つの主要な静的剤、動的プロキシ(JDKプロキシインタフェースエージェント)とCGLIBエージェント(あなたは、彼は、動的プロキシのカテゴリに属する​​、インターフェースを実装することなく、動的メモリ内のオブジェクトを作成することができます)。
  4. 回路図プロキシモード
    ここに画像を挿入説明

帯電防止剤

基本的な導入静的コードモード

静的剤、インタフェースまたはスーパークラスを定義する必要があり、代理オブジェクト(すなわち、ターゲットオブジェクト)と同じインターフェイスプロキシオブジェクトは、同一または親とを継承実装を使用する場合

アプリケーション例

特定の要件

  1. インターフェイスを定義します。ITeacherDaoを
  2. ターゲット・オブジェクトが実装インタフェースTeacherDAO ITeacherDAO
  3. 静的プロキシモードを使用して、あなたはまた、プロキシオブジェクトTeacherDAOProxyにITeacherDAOを実現する必要があります
  4. コールは、プロキシオブジェクトのメソッド呼び出しを介してターゲットオブジェクトを呼び出すとき。
  5. 特記事項:プロキシオブジェクトとターゲットオブジェクトと同じインタフェースを実装し、その後方法と同様の方法を呼び出すことにより、ターゲットオブジェクトを呼び出します

アイデア解析手法(図クラス)
ここに画像を挿入説明

静的エージェントの長所と短所

  1. 利点:ターゲットオブジェクトに変更せずに関数、ターゲット関数の拡張を介してプロキシオブジェクト
  2. 短所:プロキシオブジェクトが同じインターフェイスを実現するために目標とする必要があるため、非常に多くのプロキシクラスが存在します
  3. ターゲット・オブジェクトとプロキシオブジェクトを増大させるためのインタフェース方法が維持されなければならない後

動的プロキシ

動的プロキシモードの基本的な導入

  1. プロキシオブジェクトは、インタフェースを実装する必要はありませんが、ターゲットオブジェクトは、インターフェイスを実装するために、または動的プロキシを使用することはできません
  2. プロキシオブジェクト、APIを使用して、JDK、メモリに構築動的プロキシオブジェクトを生成します
  3. JDKエージェント、インタフェースエージェント:としても知られているダイナミックエージェント

JDKのAPIのプロキシオブジェクトの生成

  1. 演技のクラスどこパッケージ:java.lang.reflect.Proxyの
  2. JDKはnewProxyInstanceエージェントを実現する唯一の方法を使用する必要があり、この方法は、文言が完了すると、3つのパラメータが必要です。
    静的オブジェクトnewProxyInstance(のInvocationHandler Hのローダクラスローダ、クラス[]インタフェース、<?>)

ダイナミックプロキシアプリケーションの例

アプリケーションの例は、O項
ダイナミックプロキシーモードに上記静的剤を改善する(すなわち:JDKプロキシモード)
入出力考え方式(図クラス)
ここに画像を挿入説明

CGLIBエージェント

基本的な導入CGLIB代理店モデル

  1. 静的剤およびJDKプロキシモードは、ターゲット・オブジェクトを必要とインタフェースを実装することで、時にはターゲット・オブジェクトが1つだけの目的であり、任意のインターフェースを実装していない、この時間は、ターゲットオブジェクトサブクラス剤を達成するために使用することができる - これはCGLIB剤であります
  2. また、サブエージェントクラスとして知られているCGLIBエージェントは、それが対象のオブジェクト拡張機能を実現するために、メモリ内のサブクラスのオブジェクトを構築することです、本のいくつかはまた、動的CGLIBプロキシエージェントに帰属します。
  3. CGLIBは、それが拡張することができ、実行するJavaクラスは、広く多くのAOPフレームワーク、例えばAOP春、実装インターセプトに使用されるJavaインターフェースを実装し、強力な、高性能コード生成パッケージであります
  4. どのようにプログラミングでAOPプロキシモードを選択するには:
  1. ターゲットは、JDKプロキシを使用して、インターフェイスを実装する必要があります
  2. オーディエンスはCGLIB剤を用いて、インタフェースを実装する必要はありません
  1. CGLIB基礎となるパケットは、バイトコードバイトコード処理フレームを変換し、新しいクラスASMを生成することです

CGLIBプロキシモードの実装手順

  1. JarファイルはCGLIBを導入する必要があります
    ここに画像を挿入説明
  2. 動的メモリサブクラスで構築され、エージェントクラスに注意を払うが、それ以外の場合はエラーjava.lang.IllegalArgumentExceptionが、最終的にはできません。
  3. 最終的/静的は、それが傍受されない場合は、オブジェクトは」、その方法は、追加のビジネス聴衆を行いません。

CGLIBプロキシモードの応用例

アプリケーションの例としては、請求
上記ケース実施CGLIBプロキシモード
アイデアスキーム(図クラス)
ここに画像を挿入説明

いくつかの一般的なプロキシモードの紹介 - いくつかの変形

  1. ファイアウォールエージェント
    パブリックネットワークへのアクセスを可能にするファイアウォール経由のプロキシを介してネットワーク内で、。

  2. プロキシキャッシング
    リソースは、[OK]を取るリソースを取得していない場合は、パブリックネットワークやデータベース、キャッシュを取るのであれば、取るために画像ファイルや他のリソース、最初のキャッシュプロキシを要求する場合:などを。

  3. リモートエージェント
    リモートオブジェクトのローカル代表、それはリモートオブジェクトによってできたときにコールするローカルオブジェクト。リモートエージェントは、ネットワークと、実際のリモートオブジェクトを介して情報を通信します。

  4. 同期エージェント:主にマルチスレッドプログラミングで使用される、同期プロキシ間の完全なマルチスレッド同期:主にマルチスレッドプログラミングで使用される、複数のスレッド間で完全な同期

公開された93元の記事 ウォン称賛31 ビュー30000 +

おすすめ

転載: blog.csdn.net/weixin_43866567/article/details/104834165