javaにおける動的エージェントの詳細および実例
2711 ワード
Javaダイナミックエージェント関連
まず静的なプロキシモードコードを見ます。
コードを先に見ます
Proxy類のコード量は固定されており、業務が膨大になることはない。
AOPプログラミングが実現できます。実際に静的エージェントも実現できます。全体として、AOPは代理モードの典型的な応用として計算できます。
結合はパラメータによって真実の種類が判断され、事前の実用化を必要とせず、より柔軟に変化する。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。
まず静的なプロキシモードコードを見ます。
package test;
public interface Subject
{
public void doSomething();
}
package test;
public class RealSubject implements Subject{
public void doSomething() {
System.out.println( "call doSomething()" );
}
}
package test;
public class SubjectProxy implements Subject {
Subject subimpl = new RealSubject();
public void doSomething() {
subimpl.doSomething();
}
}
package test;
public class TestProxy {
public static void main(String args[]) {
Subject sub = new SubjectProxy();
sub.doSomething();
}
}
最初はSubject Proxyが定義されているのは余計だと思いますが、直接的に実用化されています。その後、業務が膨大になるにつれて、proxy類の実装は粒度のコントロールにとって重要な意味を持つことが分かります。しかし、静的エージェントというモード自体に大きな問題があります。種類の方法の数が多くなると、エージェントクラスのコード量は非常に大きいです。従って動的エージェントを導入してこのような問題を解決した。コードを先に見ます
package test;
public interface Subject
{
public void doSomething();
}
package test;
public class RealSubject implements Subject {
public void doSomething() {
System.out.println( "call doSomething()" );
}
}
package test;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
public class ProxyHandler implements InvocationHandler {
private Object tar; // ,
public Object bind(Object tar) {
this.tar = tar; // ,
return Proxy.newProxyInstance(tar.getClass().getClassLoader(), tar.getClass().getInterfaces(), this);
}
public Object invoke(Object proxy , Method method , Object[] args)throws Throwable {
Object result = null;
// AOP
// ,
result = method.invoke(tar,args);
// ,
return result;
}
}
public class TestProxy {
public static void main(String args[]) {
ProxyHandler proxy = new ProxyHandler(); //
Subject sub = (Subject) proxy.bind(new RealSubject());
sub.doSomething();
}
}
コードを読み終わったら、今答えます。ダイナミックエージェントの役割は何ですか?Proxy類のコード量は固定されており、業務が膨大になることはない。
AOPプログラミングが実現できます。実際に静的エージェントも実現できます。全体として、AOPは代理モードの典型的な応用として計算できます。
結合はパラメータによって真実の種類が判断され、事前の実用化を必要とせず、より柔軟に変化する。
読んでくれてありがとうございます。みなさんのご協力をお願いします。ありがとうございます。