一、定义
为其他对象提供一种代理,从而控制对要访问的对象的访问
二、类图
1、静态代理
Client持有IProxy,创建Tabao实例,在TaoBao实例的构造函数中,关联到Shopping
真正发起构买时,通过Proxy触发,先执行Taobao的buy,再执行Shopping的buy,client不直接和Shopping交互
2、动态代理
由jdk生成代理对象:当访问proxy的方法时,实际访问的是handler里的代理
三、代码
public class Shopping implements IShopping {
@Override
public void buy() {
System.out.println("小卖部购买");
}
}
public class MyHandler implements InvocationHandler {
Object target;
public MyHandler(Object proxy) {
this.target = proxy;
}
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("打开淘宝");
return method.invoke(target, args);
}
}
public class Client {
public static void main(String[] args) {
IShopping shopping = new Shopping();
MyHandler handler = new MyHandler(shopping);
ClassLoader classLoader = shopping.getClass().getClassLoader();
Class>[] interfaces = shopping.getClass().getInterfaces();
IShopping proxy = (IShopping)Proxy.newProxyInstance(classLoader, interfaces, handler);
proxy.buy();
}
}


