码迷,mamicode.com
首页 > 其他好文 > 详细

代理模式

时间:2019-04-11 19:27:20      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:nts   obj   system   his   开始   .com   产生   OLE   通过   

静代理模式

  • 真实角色

  • 代理角色(自定义)

  • 两个角色实现同一接口

  • 实现方式:继承 VS 聚合(构造方法为真实对象赋值)
  • 例:线程Thread

// 产生一个代理对象
Thread proxy = new Thread(new Runnable() {
     public void run() {}
});
// 调用代理对象的方法
proxy.start();

技术图片

动态代理:

  • 基于接口:jdk自带的动态代理

    • java.lang.reflect.Proxy类提供用于创建动态代理类和实例的静态方法

    • java.lang.reflect.InvocationHandler接口

      • 通过 invoke() 实现对真实角色的代理访问
      • 每次通过Proxy生成代理对象时都要指定对应的InvocationHandler对象
public class ProxyInvocationHandler implements InvocationHandler {
  //真实对象
  private Object target;
  public ProxyInvocationHandler(Object target) {
     this.target = target;
  }
  @Override
  public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
     System.out.println("代理方法开始.....");

     Object result = method.invoke(target, args);
     System.out.println("代理方法结束.....");
     return result;

  }

}
// 测试方法
public void test() {
  Role realRole = new RealRole();
  ProxyInvocationHandler handler = new ProxyInvocationHandler(realRole);

  // 生成代理类

  Role proxy = (Role) Proxy.newProxyInstance(ClassLoader.getSystemClassLoader(),realRole.getClass().getInterfaces(),handler);
  // 实际上会调用 handler 的 invoke 方法

  proxy.sing();

}
  • 基于类:cglib
  • 使用 javassist 生成动态代理

代理模式

标签:nts   obj   system   his   开始   .com   产生   OLE   通过   

原文地址:https://www.cnblogs.com/mabaoqing/p/10691574.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!