代理模式(Proxy)
1、本质:控制对象访问
2、使用示例:
1、当需要从数据库获取某公司所有人员信息时
2、每一位人员有很多字段,比如几百上千个
3、如果全部获取出来,将消耗特别多的内存
4、解决基本思路:只需要返回用户编号和用户姓名等基本信息,再次使用时,可以根据编号再去数据库获取 --以时间换空间
3、示意图:

4、代理分类:
1、虚代理
根据需要来创建开销很大的对象,该对象只有在需要的时候才会被真正创建
2、远程代理
用来在不同的地址空间上代表同一个对象,这个不同的地址空间可以在本机,也可以在其他机器上。(RMI)
3、copy-on-write代理
在客户端操作的时候,只有对象却是改变了,才会真的拷贝(或克隆)一个目标对象,可以算虚代理的一个分支
4、保护代理
控制对原始对象的访问,如果有需要,可以给不同的用户提供不同的访问权限,以控制他们对原始对象的访问
5、Cache代理
为那些昂贵操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果
6、防火墙代理
保护对象不被恶意用户访问和操作
7、同步代理
使多个用户能够同时访问目标对象而没有冲突
8、智能引用
在访问对象时,执行一些附加操作。例如:对指向实际对象的引用计数、第一次引用一个持久对象时,将它装入内存等
5、Java中的代理 --动态代理(接口的代理) --类的代理可以用cglib
1、代理类实现InvocationHandler接口
2、代理类需要实现invoke方法,在这个方法中,具体判断当前是调用什么方法,需要如何处理
3、代理类可以提供一个方法来实现:把具体的目标对象和动态代理绑定起来,并在绑定过后,返回被代理的目标对象的接口,以便客户端操作 --newProxyInstance

浙公网安备 33010602011771号