设计模式的艺术 第十五章代理设计模式练习(设计一款基于 C/S 的网络图片查看器,用户只需在图片查看器中输入网页 URL,程序将自动将网页所有图片下载到本地。)
Sunny 软件公司欲开发一款基于 C/S 的网络图片查看器,具体功能描述如下:用户只需在图片查看器中输入网页 URL,程序将自动将网页所有图片下载到本地。考虑到有些网页图片比较多,而且某些图片文件比较大,因此将先以图标的方式显示图片。不同类型的图片使用不同的图标,并且在图标下面标注该图片的文件名,用户单击图片后可查看原图。试使用虚拟代理模式设计并实现该图片查看器。(可以结合多线程机制,使用一个线程显示小图标,同时启动另一个线程在后台加载原图。)
一、类结构图
抽象主题角色类:设计为名称为 WebImageViewer 的接口,包含抽象方法 downloadImages(String webPageUrl);
真实主题角色类:设计为抽象主题角色类的子类,设计为名称为 RealWebImageViewer 的具体类,包含具体方法 downloadImages(String webPageUrl);
代理主题角色类:设计抽象主题角色类的子类,名称为 ProxyWebImageViewer 的具体类,持有一个真实主题角色类 RealWebImageViewer 的引用,并实现抽象主题角色类的抽象方法 downloadImages(String webPageUrl),方法内部启用 2 个线程,一个线程用于展示图片类型的图片、一个线程通过调用真实主题角色类对象的方法用于下载真实的图片。
图片类型查看器具体类:设计为名称为 ImageTypeViewer 的具体类,包含获取所有图片地址的具体方法 getImageUrls()、获取所有图片对应类型的具体方法 getProxyImages()。
二、典型实现代码
抽象网页图片查看器类:抽象主题角色类
真实网页图片查看器类:真实主题角色类
代理网页图片查看器类:代理主题角色类
图片类型查看器具体类:具体类
客户端代码:
编译并运行程序,输出如下结果:
版权声明: 本文为 InfoQ 作者【代廉洁】的原创文章。
原文链接:【http://xie.infoq.cn/article/964febfee395176a5e06ae59d】。文章转载请联系作者。
评论