一、定义
为其他对象提供一种代理,从而控制对要访问的对象的访问
二、类图
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(); } }
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)