設計模式之代理模式

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


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