//抽象主题接口类
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()后的调用过程是什么?
转载于:https://my.oschina.net/u/1401580/blog/225227