动态代理模式
通过代理类,接口和实现类之间可以不直接发生关系,而是在运行实现动态关联。
public interface Subject {
public void shopping();
}
public class Person implements Subject {
@Override
public void shopping() {
System.out.println("XX商品购买成功");
}
}
import java.lang.reflect.InvocationHandler;
import java.lang.reflect.Method;
// 用于动态生成代理对象
public class Proxy implements InvocationHandler {
private Object targect; //被代理对象
/**
*用于创建代理对象
* @param targect 被代理对象
* @return
*/
public Object creact(Object targect){
this.targect = targect;
// 创建代理对象的实例
/**
* 参数1:类加载器
* 参数2:接口
* 参数3:创建代理类的对象(当前类Proxy)
*/
return java.lang.reflect.Proxy.newProxyInstance(targect.getClass().getClassLoader(),
targect.getClass().getInterfaces(),this);
}
/**
* 代理对象要执行的方法
* @param proxy 代理类对象
* @param method 被代理对象的方法
* @param args 被代理对象方法的参数
* @return
* @throws Throwable
*/
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("代购已找到商品");
System.out.println("");
method.invoke(targect,args);
System.out.println("交易结束");
return null;
}
}
public class Test {
public static void main(String[] args) {
Proxy p = new Proxy();
Subject person = new Person();
Subject proxy = (Subject)p.creact(person);
proxy.shopping();
}
}
原文:https://www.cnblogs.com/VVII/p/11823773.html