当前位置:首页 > CN2资讯 > 正文内容

【设计模式】代理设计模式代理模式

2天前CN2资讯

代理(Proxy)

Intent

控制对其它对象的访问。

Class Diagram

代理有以下四类:

  • 远程代理(Remote Proxy):控制对远程对象(不同地址空间)的访问,它负责将请求及其参数进行编码,并向不同地址空间中的对象发送已经编码的请求。
  • 虚拟代理(Virtual Proxy):根据需要创建开销很大的对象,它可以缓存实体的附加信息,以便延迟对它的访问,例如在网站加载一个很大图片时,不能马上完成,可以用虚拟代理缓存图片的大小信息,然后生成一张临时图片代替原始图片。
  • 保护代理(Protection Proxy):按权限控制对象的访问,它负责检查调用者是否具有实现一个请求所必须的访问权限。
  • 智能代理(Smart Reference):取代了简单的指针,它在访问对象时执行一些附加操作:记录对象的引用次数;当第一次引用一个对象时,将它装入内存;在访问一个实际对象前,检查是否已经锁定了它,以确保其它对象不能改变它。

Implementation

以下是一个虚拟代理的实现,模拟了图片延迟加载的情况下使用与图片大小相等的临时内容去替换原始图片,直到图片加载完成才将图片显示出来。

public interface Image { void showImage(); } public class HighResolutionImage implements Image { private URL imageURL; private long startTime; private int height; private int width; public int getHeight() { return height; } public int getWidth() { return width; } public HighResolutionImage(URL imageURL) { this.imageURL = imageURL; this.startTime = System.currentTimeMillis(); this.width = 600; this.height = 600; } public boolean isLoad() { // 模拟图片加载,延迟 3s 加载完成 long endTime = System.currentTimeMillis(); return endTime - startTime > 3000; } @Override public void showImage() { System.out.println("Real Image: " + imageURL); } } public class ImageProxy implements Image { private HighResolutionImage highResolutionImage; public ImageProxy(HighResolutionImage highResolutionImage) { this.highResolutionImage = highResolutionImage; } @Override public void showImage() { while (!highResolutionImage.isLoad()) { try { System.out.println("Temp Image: " + highResolutionImage.getWidth() + " " + highResolutionImage.getHeight()); Thread.sleep(100); } catch (InterruptedException e) { e.printStackTrace(); } } highResolutionImage.showImage(); } } public class ImageViewer { public static void main(String[] args) throws Exception { String image = "http://image.jpg"; URL url = new URL(image); HighResolutionImage highResolutionImage = new HighResolutionImage(url); ImageProxy imageProxy = new ImageProxy(highResolutionImage); imageProxy.showImage(); } }

JDK

  • java.lang.reflect.Proxy
  • RMI
    你可能想看:

    扫描二维码推送至手机访问。

    版权声明:本文由皇冠云发布,如需转载请注明出处。

    本文链接:https://www.idchg.com/info/24628.html

    分享给朋友:

    “【设计模式】代理设计模式代理模式” 的相关文章

    DMIT VPS评测:高性能与稳定性的完美结合

    在了解DMIT VPS之前,我想先分享一下我对这家公司的最初印象。记得第一次听到DMIT时,它的名字总是在VPS领域中流传。人们提到它时,无一不带着敬仰,增加了我对它的好奇心。自从它在2017年成立以来,DMIT便以其优秀的服务和产品迅速吸引了不少用户。我也开始关注起它背后的故事。 DMIT的崛起显...

    查看可用端口的重要性与实用方法

    查看可用端口的重要性 查看可用端口是网络管理中不可忽视的一环。这一过程涉及到对我们系统安全的理解与把控。端口是计算机与外界沟通的桥梁,更是我们网络环境中的“守门员”。做好端口监控不仅能保障服务的顺畅进行,更能有效预防潜在的安全风险。 在日常网络管理中,端口的状态直接影响了系统服务的可用性。当一个服务...

    咸鱼云:高性价比VPS服务解决您的在线需求

    咸鱼云概述 在互联网服务日益发展的今天,咸鱼云(SaltyFish)作为一家新兴的主机商家,自2019年成立以来,逐渐在市场中占据了一席之地。它的出现让许多寻找高性价比VPS服务的用户有了新的选择。咸鱼云专注于基于KVM架构的国外VPS服务,凭借较为稳定的性能和实惠的价格,吸引了不少追求性价比的客户...

    深入了解LOC VPS:选择、评测与未来发展趋势

    LOC VPS,顾名思义,是一种基于位置的虚拟专用服务器。简单来说,LOC VPS是一种通过虚拟化技术在数据中心创建和管理的服务器环境。它为用户提供了一种灵活、可扩展的计算资源,可以满足不同需求的业务。相较于物理服务器,LOC VPS在资源利用率、成本和管理上都更加高效。 LOC VPS有几个显著的...

    反向代理的工作原理与网络架构中的重要性

    在探讨反向代理之前,首先了解它的基本定义非常重要。反向代理是一种网络服务,它充当客户端和服务器之间的中介。当用户通过反向代理发送请求时,这些请求并不会直接到达目标服务器。相反,反向代理会收集请求,然后转发给适当的服务器处理。处理完毕后,服务器将响应返回给反向代理,最后再由反向代理将结果传递给客户端。...

    Just Host VPS:全面分析与优缺点评估

    Just Host VPS 概述 在今天的数字化时代,随着网络技术的不断发展,越来越多的人开始关注虚拟专用服务器(VPS)。那么,什么是 VPS 呢?简单来说,VPS 是将一台物理服务器划分成多个虚拟服务器的技术。这意味着用户可以获得独立的操作环境和资源,而不必与其他用户共享,这样的隔离性提高了性能...