GOF23(6)之代理模式(结构型模式)
1、核心作用 通过代理,控制对对象的访问。可以详细控制访问某个对象的方法,在调用这个方法之前做前置处理,调用这个方法之后做后置处理。Spring的AOP就是利用代理模式进行实现的。 2、代理模式的角色 抽象角色:定义代理角色和真实角色的公共对外方法; 真实角色:实现抽象角色,定义真实角色所要实现的业务逻辑,供代理角色使用; 代理角色:实现抽象角色,是真实角色的代理,通过真实角色的业务逻辑方法来实现抽象方法,并可以附加自己的操作。实现了将统一的流程控制放到了代理角色中处理。 代理角色持久真实角色的引用 3、应用场景 安全代理:屏蔽对真实对象的直接访问; 远程代理:通过代理类处理远程方法调用(RMI); 延迟加载:先加载轻量级的代理对象,真正需要的时候才加载真实的对象。比如开发一个大文档查看软件,里面有大量的图片,有可能图片的大小有100M,在打开文件时不可能将所有的图片都显示出来,于是可以使用代理模式,当需要查看图片时,用proxy进行大图片的打开。 4、分类 代理可以分为静态代理和动态代理; 静态代理:静态生产代理类。 动态代理:动态生成代理类。 实现动态代理的技术:JDK自带的动态代理,javaassist字节码操作库实现,CGLIB,ASM(底层使用指令,可维护性较差)。 5、代码实现 5.1 静态代理 5.1.1 创建抽象角色 package com.zdw.proxy