JAvaダイナミックエージェントモード
1717 ワード
//
public interface AbstractSubject{
public void request();
}
// A
public class RealSubjectA implements AbstractSubject{
public void request(){
System.out.println(" RealSubjectA !");
}
}
// B
public class RealSubjectB implements AbstractSubject{
public void request(){
System.out.println(" RealSubjectB !");
}
}
//
import java.lang.reflect.*;
public class DynamicProxy implements InvocationHandler{
private Object obj;
public DynamicProxy(){}
public DynamicProxy(Object obj){
this.obj=obj;
}
public Object invoke(Object proxy,Method method,Object[] args) throws Throwable{
preRequest();
method.invoke(obj,args);
postRequest();
return null;
}
public void preRequest(){
System.out.println(" before Request!");
}
public void postRequest(){
System.out.println(" after Request!");
}
}
//
import java.lang.reflect.*;
public class Client1{
public static void main(String[] args) {
InvocationHandler handler =null;
AbstractSubject subject = null;
handler = new DynamicProxy(new RealSubjectA());
subject = (AbstractSubject)Proxy.newProxyInstance(AbstractSubject.class.getClassLoader(),new Class[]{AbstractSubject.class},handler);
subject.request();
System.out.println(" ------------------ !");
handler = new DynamicProxy(new RealSubjectB());
subject = (AbstractSubject)Proxy.newProxyInstance(AbstractSubject.class.getClassLoader(),new Class[]{AbstractSubject.class},handler);
subject.request();
}
}
:
before Request!
RealSubjectA !
after Request!
------------------ !
before Request!
RealSubjectB !
after Request!
:subject ?subject.request() ?