博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之代理模式
阅读量:5760 次
发布时间:2019-06-18

本文共 1169 字,大约阅读时间需要 3 分钟。

静态代理模式

  • 真实角色

  • 代理角色(自定义)

  • 两个角色实现同一接口

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

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

1013480-20190411183719393-45799864.png

动态代理

  • 基于接口: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 生成动态代理

转载于:https://www.cnblogs.com/mabaoqing/p/10691574.html

你可能感兴趣的文章
Java中基本数据类型的存储方式和相关内存的处理方式
查看>>
合唱队
查看>>
文件查找
查看>>
南锣鼓巷大变样,最新逛吃全攻略收好!
查看>>
Linux系统排查1—内存篇
查看>>
springMVC工作原理
查看>>
atlsd.lib 和 atls.lib冲突
查看>>
第六章 Linux物理卷、卷组、逻辑卷和磁盘配额
查看>>
第三章 大网 OSPF多区域
查看>>
我的友情链接
查看>>
Citrix虚拟化技术之八XenDesktop7.1部署和Win7虚拟桌面发布
查看>>
23Exchange Server 2010跨站点部署-公网邮箱系统配置及公网记录
查看>>
HTML5 大战移动应用(三)
查看>>
博客文章文章里可以写样式
查看>>
陈松松:视频营销卖好酿酒设备之选择酿酒设备6大参考标准
查看>>
Spring MVC 拦截器(2)-WebRequestInterceptor
查看>>
Docker搭建本地私有仓库
查看>>
使用wget下载openstack rpm包制作本地源
查看>>
慎用angular.forEach
查看>>
由于索引关闭导致kibana启动报错
查看>>