设计模式之代理模式

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方法
    }  
  }  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章