1.インタフェース
パブリック インターフェイスチャンネル{ 無効送信(); }
2.実装クラスは、(様々な異なる実装形態のものであってもよいです)
パブリック クラス ChannelImplは実装チャンネル{ @Override 公共 無効送信(){ System.out.printlnは(「メッセージを送ります」)。 } }
3.静的エージェント:Agentクラス
パブリック クラス ChannelProxyは実装チャンネル{ // 代理对象 チャンネルチャンネルを、 // 传入代理对象 公共ChannelProxy(チャンネルチャネル){ この .channel = チャネル; } @Override 公共 ボイド送信(){ System.out.printlnは( "メッセージを送信開始" )。 channel.send(); System.out.println(「メッセージを送信終了」)。 } }
3.ダイナミックエージェント:Agentクラス
/ ** のInvocationHandlerのエージェント実装作成* / パブリック クラス MyHandlerという用具のInvocationHandlerの{ / ** *ターゲットオブジェクト * / オブジェクトターゲットを、 公共MyHandlerという(オブジェクト・ターゲット){ この .TARGET = 目標; } @Override パブリックオブジェクト呼び出しは(プロキシ、メソッド、オブジェクトこの方法は、オブジェクト[]引数)がスローされたThrowable { するSystem.out.println( "送信メッセージ開始" ;) のSystem.out.println( + ":+ target.getClass( "コール対象物") 、ターゲットメソッド:" + 方法.getName())。 オブジェクトの結果 = method.invoke(ターゲット) System.out.println(「メッセージを送信終了」)。 戻り値の結果; } }
4.コール
パブリック クラスProxyTest { 公共 静的 ボイドメイン(文字列[]引数){ するSystem.out.println(「=================静态代理========= ==========」); チャンネルチャンネル = 新しいChannelImpl(); ChannelProxy channelProxy = 新しいChannelProxy(チャンネル) channelProxy.send(); System.out.println( "=================动态代理===================" ); MyHandlerというはmyHandler = 新しいMyHandlerという(チャンネル) チャネルターゲット =(チャンネル)(たとえば、Proxy.newProxyInstance(channel.getClass()のgetClassLoader()、channel.getClass()でgetInterfaces()は、myHandler)。。); target.send(); } }
5.結果
=================静的プロキシは=================== メッセージ送信開始 メッセージが送信 終了メッセージを送信し ==== =============ダイナミックプロキシは=================== メッセージが送信開始 クラスproxy.ChannelImpl、客観的な方法:送信対象オブジェクトを呼び出しを sendがメッセージ 終了は、メッセージを送信します
比較:
静的プロキシ:
プロキシクラスを使用すると、プロキシクラスを呼び出すことができた場合にのみ、その特定の実装クラスとどのようにsendメソッドを実装する気にしませんが、デカップリングエージェントクラスと実装クラスは、インタフェースは、エージェントクラスと実装クラスを追加した場合、インターフェイスのすべてを実装する必要があります。あなたが他のプロキシインタフェースが必要な場合は、プロキシクラスのコードの冗長性とチェンジエージェント、追加する必要が1つのインタフェースだけ、あなたは新しいプロキシクラスを作成する必要があります
:動的プロキシ
なしの静的なエージェントの冗長性に加えて、静的プロキシ基礎を指定されたインターフェイスを実装する、任意の界面剤とすることができる、そのようなチャネルインターフェイスなどの他の方法がある場合create()メソッドは、MyHandlerというを呼び出す同様に処理されるので、界面法は比較的に長い時間である場合、我々は、インタフェースにメソッドを必要とします統一されたプロセス、動的なプロセスを使用して、より便利に、より多くの再利用性