/ *エージェントモデル
*
*生活:
家を購入する購買賃借人を見つけるために海外に行くために、そのために...:*(1)は、例えば、自分のことを行うのが便利ではありません
* 1、プロキシモード
*は、(1)テーマインターフェース:とプロキシクラスが必要ですエージェントクラスが実装例えば同じインターフェース、:DAOインタフェース
*(2)ブローカー
*(3)ブローカー
・ブローカに参照有していなければならない
*
* 2、静的プロキシモード
*欠点:Aのみのプロキシクラスを作用テーマ(インターフェイス)機関の仕事
*
* 3、動的プロキシモード
*利点:プロセッサ機関の仕事は、複数のエージェントトピック機関とすることができるようにのみコンテンツ代理店仕事のために働くことができます。
*要件:
*(1)エージェントの作業クラスのプロセッサの準備、このクラスはインターフェイスのInvocationHandler実装する必要が
JDKで*(2)オブジェクトのプロキシクラスを作成するためにプロキシクラスを提供
*(3)メソッドを呼び出します
例:静的プロキシ
A {インターフェース
ボイドランを();
}
クラスBの実装A {
@Override
公共ボイドラン(){
(INTはI = 0、I <1000; I ++){ため
のSystem.out.println(I)。
}
}
}
クラスStaticProxyはA {実装
プライベートAと、
公共StaticProxy(AとA){
this.a = A。
}
@Override
公共ボイドRUN(){
System.out.printlnは( "RUN方法を行う");
ロングSTART =のSystem.currentTimeMillis();
a.run();
長辺=にSystem.currentTimeMillis();
System.out.printlnは( "実行時間:" +(終了-開始]));
のSystem.out.println( "RUN方法が実行を終了しました");
}
}
静的エージェントの使用:.新StaticProxy(新しいB())を実行します()
例:動的プロキシ
インターフェースC {
ボイドラン();
}
C {CImpl実装するクラス
@Override
公共ボイドRUN(){
System.out.printlnは( "RUNインターフェース実装方法C");
}
}
クラスDynamicProxy実装のInvocationHandler {
//プロキシオブジェクト
プライベートオブジェクトobj;
公共DynamicProxy(オブジェクトobj){
this.obj = OBJ;
}
/ *
*パラメータ:オブジェクトプロキシクラス
*パラメータII:ブローカによって実行されるメソッド
*三つのパラメータ:この方法は、必要な引数リストを実行するためのブローカである
*このメソッドは、呼び出されたプログラムではないが、ありますオブジェクトがプロキシクラスを実行されたときにメソッドが自動的に呼び出されます
* /
@Override
(オブジェクトプロキシ、メソッドのメソッド、オブジェクト[]引数)を呼び出すパブリックオブジェクトのThrowable {スロー
するSystem.out.println(method.getName()+ "方法を执行")。
ロング)(開始=にSystem.currentTimeMillis。
対象物体= method.invoke(OBJ、引数)。
長い端=にSystem.currentTimeMillis();
System.out.println( "执行时间:" +(終了-開始));
System.out.println(method.getName()+ "方法执行结束");
オブジェクトを返します。
}
}
ダイナミックエージェントが使用します:
パブリッククラスTestProxy2 {
パブリック静的無効メイン(文字列[] args){
クラスclazz = CImpl.class。
クラスローダローダ= clazz.getClassLoader()。
クラス[]インターフェイス= clazz.getInterfaces()。
Cプロキシ=(C)たとえば、Proxy.newProxyInstance(ローダ、インターフェイス、新しいDynamicProxy(clazz))。
proxy.run();
}
}