package com.designer;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
class DynamicProxyRole implements InvocationHandler{
private Object sub;
public DynamicProxyRole(){}
public DynamicProxyRole(Object ob){
this.sub = ob;
}
//proxy指的是代理类 method是被代理的方法 obs是指被代理的方法的参数组
public Object invoke(Object proxy, Method method, Object[] obs) throws Throwable{
method.invoke(sub,obs);
return null;
}
}
public class Main{
public static void main(String[] args){
RealRole rr = new RealRole();
InvocationHandler dynamicProxy = new DynamicProxyRole(rr);
RealRoleOne rr1 = new RealRoleOne();
dynamicProxy = new DynamicProxyRole(rr1);
Class<?> cls = rr1.getClass();
//Proxy:该类为动态代理类 (代理模式)
//动态代理其实是在运行时生成class,所以,我们必须提供一组interface,
//然后告诉他class已经实现了这些interface,而且在生成Proxy的时候,必须给他提供一个handler,让他来接管实际的工作。
AbsRole r = (AbsRole)Proxy.newProxyInstance(cls.getClassLoader(),cls.getInterfaces(),dynamicProxy);
r.work(); //会调用DynamicProxyRole方法里面的invoke方法
}
}
设计模式之代理模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.