首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

【设计形式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)

2013-10-08 
【设计模式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)本文出自http://blog.csdn.net/shuangde800在

【设计模式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)



本文出自   http://blog.csdn.net/shuangde800




在上篇中,我们学习了代理模式,并用Java RMI实现了一个最简单的远程代理。实际上代理模式并不仅仅应用与远程代理,还有很多其他的应用。比如:虚拟代理。代理模式可以以很多形式出现,但基本上符合一般代理的设计。为何有这么多的形式呢?因为代理模式可以被用在许多不同的例子中。


走进代理模式

我们打算建立一个应用程序,用来展现你最喜欢的CD封面。你可以建立一个CD标题菜单,然后从豆瓣等网站的在线服务中取得CD封面的图。如果使用Swing,可以创建一个Icon接口从网络上加载图像。唯一的问题是,限于连接带宽和网络负载,下载可能需要一些时间,所以在等待图片加载的时候,应该显示一些东西。我们希望在等待图像时整个应用程序被挂起。一旦图像被加载完成,刚才显示的东西应该消失,图像显示出来。

效果图:
正在下载中:【设计形式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)

下载完成并且显示:
【设计形式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)



想要做到这样,简单的方式就是利用虚拟代理。虚拟代理可以代理Icon,管理背景的加载,并在加载未完成时显示“CD封面加载中,请稍后......”,一旦加载完成,代理就把显示的职责委托给Icon

比较远程代理和虚拟代理:
远程代理:远程代理可以作为另一个JVM上对象的本地代表。调用代理的方法,会被代理利用网络转发到远程执行,并且结果会通过网络返回给代理,再由代理将结果转给客户。
虚拟代理:虚拟代理是作为创建开销大的对象的代表。虚拟代理经常直到我们真正需要一个对象的时候才创建它。当对象在创建前和创建中时,由虚拟代理来扮演对象的替身。对象创建后,代理就会将请求直接委托给对象。


设计CD封面虚拟代理此类图和远程代理的图很类似,但是这里的代理是用于隐藏创建开销大的对象(因为我们要通过网络取得图像数据),而不是隐藏在网络其他地方的对象【设计形式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)


ImageProxy如何工作:1. ImageProxy首先创建一个ImageIcon,然后开始从网络URL上加载图像2. 在加载的过程中,ImageProxy显示”CD封面加载中,请稍后......“3. 当图像加载完毕,ImageProxy把所有方法调用委托给真正的ImageIcon,这些方法包括了paintIcon(), getWidth()和getHeight().4. 如果用户请求新的图像,我们就创建新的代理,重复这样的过程。


使用虚拟代理实现CD封面加载器
1. 编写ImageProxy



【设计形式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)


【设计形式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)


【设计形式】学习笔记16:代理模式之虚拟代理(实现CD封面加载器)




6楼suannai03143天前 09:09
您的文章已被推荐到博客首页和个人页侧边栏推荐文章,感谢您的分享。
Re: shuangde8003天前 10:41
回复suannai0314n谢谢 :)
Re: suannai03143天前 08:52
回复u011850954n您的文章已被推荐到博客首页和个人页侧边栏推荐文章,感谢您的分享。
4楼i_like_cpp3天前 00:11
真帅,文章收藏了。
Re: shuangde8003天前 08:21
回复i_like_cppn谢谢关注
3楼ironxue4天前 11:16
楼主强大啊。学习了。。
Re: shuangde8004天前 20:38
回复ironxuen同在学习中,见笑了...
2楼a8436495244天前 10:53
楼主很强大了n我借鉴学习学习了~!
1楼supersugar31264天前 10:52
mark

热点排行