动态代理
代码实现:
package dynamicproxy;
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
import java.lang.reflect.Proxy;
/**
被代理的对象是一个接口
- 类的作用是创建一个代理对象
*/
public class ProxyFactory {
//描述一个方法 通过Proxy这个类获取一个代理对象
public static T getStore(Class clazz){
//通过Proxy类帮我们创建一个对象
//创建代理对象需要的参数 类加载器
ClassLoader loader = clazz.getClassLoader();
//代理的类,Proxy类的方法需要参数是一个Class数组
Class[] classes = new Class[]{clazz};
//代理之后的方法
InvocationHandler handler = new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
iPhone iPhone = new iPhone();
return iPhone;
}
};
T proxy = (T)Proxy.newProxyInstance(loader,classes,handler);
//返回Proxy代理类
return proxy;
}
} - package dynamicproxy;
public class TestMain {
public static void main(String[] args){<br /> Store store = ProxyFactory._getStore_(AppleStore.class);<br /> iPhone iPhone = store.SelliPhone();<br /> iPhone.call();<br /> iPhone.play();<br /> iPhone.potato();<br /> }<br />}<br />package dynamicproxy;
/**
- 手机类
- 可以打电话
- 可以玩游戏
- 可以拍照片
- 手机有尺寸
- 手机有颜色
*/
public class iPhone {
private String color ;
private String size;
public void call(){
System.out.println(“真的iPhone ,打电话方法”);
}
public void play(){
System.out.println(“真的iPhone ,玩游戏方法”);
}
public void potato(){
System.out.println(“真的iPhone ,拍照方法”);
}
} - package dynamicproxy;
/**
- 这是一个工厂
- 可以创造手机
- 可以出售手机
*/
public interface AppleStore extends Store {
iPhone SelliPhone();
}
package dynamicproxy;
public interface Store {
iPhone SelliPhone();
}
