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方法
}
}
設計模式之代理模式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.