代理模式之虚拟代理(仅了解)

时间:2022-09-09 09:10:45
【0】README
0.1)本文全文转自 “head first 设计模式”,旨在了解 虚拟代理+动态代理;
0.2)晚辈我 java.swing 烂到渣,没有写出干货荔枝,抱歉;

【1】虚拟代理简述
1)远程代理: 作为另一个jvm上对象的本地代表;
2)虚拟代理:作为创建开销大的对象的代表;虚拟代理经常直到我们真正需要一个对象的时候才创建它;当对象在创建前或创建中时,由虚拟代理来扮演对象的替身;对象创建后,代理就会将请求直接委托给对象;
3)problem+solution:
  • 3.1)problem:从网络上下载图片,唯一的问题是,限于连接带宽和网络负载,下载可能需要一段时间,所以在等待图像加载的时候,应该显示一些东西。我们也不希望在等待图像时整个应用程序被挂起。一旦图像被加载完成,刚才显示的东西应该消失,图像显示出来;
  • 3.2)solution:虚拟代理就可以做到这一切。虚拟代理可以代理Icon, 管理背景的加载,并在加载未完成时显示“图片加载中,please waiting”,一旦加载完成,代理就把显示的职责委托个Icon;(它这里其实是在模拟一个场景——当我们登录天猫的时候,它的图片也不可能一下子全部就加载完,待图片下载完后才完全显示图片,但当图片没有下载完之前,它都是waiting 状态);
4)虚拟代理的应用场景:当我们登录天猫的时候,它的图片也不可能一下子全部就加载完,,但当图片没有下载完之前,它都是waiting 状态,待图片下载完后才完全显示图片; (干货——虚拟代理应用场景和天猫上图片加载有关),这里还差个荔枝.....

【2】建立保护代理(利用动态代理创建保护代理)
1) java在 java.lang.reflect 包中有自己的代理支持,利用这个包你可以在运行时动态地创建一个代理类,实现一个或多个接口,并将方法的调用转发到你所指定的类。因为实际的代理类是在运行时创建的,我们称这个java技术为动态代理; (干货——动态代理的定义)

2)定义 PersonBean对象
  • 2.1)problem:根据我们的定义, 在PersonBean中,任何客户都可以调用任何方法;一些客户认为系统不应该允许其他用户更改别人的兴趣,也不应该给他自己打分;
  • 2.2)solution:使用保护代理。什么是保护代理? 这是一种根据访问权限决定客户是否访问对象的代理。如保护代理允许普通雇员调用一些方法,而经理可以调用更多的方法;
3)在我们的设计中:  我们希望顾客可以设置自己的信息,同时又放置他人更改这些信息。但别人 是可以给您评分的;
4)必须创建两个代理:一个访问你自己的PersonBean对象,一个访问其他顾客的PersonBean对象;此处略去一万字......: