2.7设计模式——Proxy 代理模式(结构型)

意图

为其它对象提供一种代理以控制这个对象的访问。

结构

  1. Proxy保存一个引用使得代理可以访问实体;提供一个与Subject的接口相同的接口,使代理可以用来替代实体;控制实体的存取,并可能负责创建和删除它;其他功能依赖于代理的类型;
    1. Remote Proxy负责对请求及其他参数进行编码,冰箱不同地址空间中的实体发送已编码的请求;
    2. Virtual Proxy可以缓存实体的附加信息,以便延迟对它的访问;
    3. Protection Proxy检查调用者是否具有实现一个请求所必须的访问权限;
  2. Subject定义RealSubject和Proxy的公用接口,这样就可以在任何使用RealSubject的地方都可以使用Proxy。
  3. RealSubject定义Proxy所代表的实体。

适用性

Proxy模式适用于在需要比较通用和复杂的对象指针替代简单指针的时候,常见的情况有:

  • 远程代理(Remote Proxy):为一个对象在不同地址空间提供局部代表。
  • 虚拟代理(Virtual Proxy):根据需要创建开销很大的对象。
  • 保护代理(Protecion Proxy):控制对原始对象的访问,用于对象应该有不同的访问权限的时候。
  • 智能引用(Smart Reference):取代了简单额指针,它在访问对象时执行一些附加操作,典型用途包括:对指向实际对象的引用计数,这样当该对象没有引用时,可以被自动释放;当第一次引用一个持久对象时,将它装入内存;在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它。

代码示例

使用虚拟代理模式来设计图像查看器程序。将创建一个虚拟代理类 ImageProxy 和一个真实类 RealImageImageProxy 类将延迟加载 RealImage 对象。

// 虚拟代理类
public class ImageProxy implements Image {private String filename;private RealImage realImage;public ImageProxy(String filename) {this.filename = filename;}@Overridepublic void display() {if (realImage == null) {realImage = new RealImage(filename);}realImage.display();}
}// 真实类
public class RealImage implements Image {private String filename;public RealImage(String filename) {this.filename = filename;// 加载图像数据System.out.println("加载图像:" + filename);}@Overridepublic void display() {// 显示图像System.out.println("显示图像:" + filename);}
}// 测试代码
public class Main {public static void main(String[] args) {Image image1 = new ImageProxy("image1.jpg");Image image2 = new ImageProxy("image2.jpg");image1.display(); // 加载图像1image2.display(); // 加载图像2image1.display(); // 不再加载图像1}
}

代码设计注释

  • ImageProxy 类是一个虚拟代理类,它实现了 Image 接口。
  • ImageProxy 类有一个构造函数,它接受图像文件名作为参数。
  • ImageProxy 类有一个 display() 方法,它负责显示图像。如果 realImage 对象为空,则创建一个新的 RealImage 对象并加载图像数据。否则,直接调用 realImage.display() 方法。
  • RealImage 类是一个真实类,它也实现了 Image 接口。
  • RealImage 类有一个构造函数,它接受图像文件名作为参数。
  • RealImage 类有一个 display() 方法,它负责显示图像。
  • 在 Main 类中,创建了两个 ImageProxy 对象,并调用了它们的 display() 方法。第一次调用 image1.display() 时,会加载图像1。第一次调用 image2.display() 时,会加载图像2。第二次调用 image1.display() 时,不会再加载图像1,因为 realImage 对象已经存在

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/651207.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2024年世界排名TOP250医院榜单发布|医学访学/博后/联培博士参考

作为医学类的访问学者、博士后及联合培养博士们,都希望到世界知名医院进行临床研修交流及科研学习。2024年世界最佳医院排行榜的发布为申请者提供了可选目标,现知识人网小编整理刊出。 近日,美国《新闻周刊》(Newsweek&#xff09…

IDEA生成测试类

方法一 具体流程: 选中要生成的测试类------------>选择code选项------------>选择Generate选项---------->选择test选项---------->选择要生成的方法 第一步: 光标选中需要生成测试类的类 找到code选项 选中Generate选项 选中test选项 选中你要生成的测试…

Web前端一套全部清晰 ③ day2 HTML 标签综合案例

别让平淡生活&#xff0c;耗尽所有向往 —— 24.4.26 综合案例 —— 一切都会好的 网页制作思路&#xff1a;从上到下&#xff0c;先整体到局部&#xff0c;逐步分析制作 分析内容 ——> 写代码 ——>保存——>刷新浏览器&#xff0c;看效果 <!DOCTYPE html> &l…

PyQt6 优化操作:建立侧边栏,要求可拖拽改变宽度,可用按钮控制侧边栏的展开和收起

1. 官方文档 QSplitter — PyQt Documentation v6.6.0 2. 效果展示 可拖拽改变宽度比例 点击按钮快速收起或展开侧边栏 点击按钮&#xff0c;侧边栏收起&#xff0c;同时按钮图标变为向左箭头 (对应展开功能)&#xff0c;再次点击按钮&#xff0c;侧边栏展开&#xff0c;同…

python批量删除文件

python批量删除文件 1、查询与删除2、添加模块到地址中3、批量删除多个路径中不需要导出的文件 1、查询与删除 mport osdef get_files_in_folder(folder_path):files []for file in os.listdir(folder_path):if os.path.isfile(os.path.join(folder_path, file)):files.appen…

【调研分析】机器视觉及其系统

机器视觉 定义 机器视觉主要利用计算机模拟人的视觉功能&#xff0c;但不仅限于人眼的简单延伸&#xff0c;而是具备人脑的部分功能&#xff0c;即从客观事物的图像中提取信息、进行处理并加以理解&#xff0c;从而应用于实际的检测识别、测量和控制过程。 机器视觉系统组成 …

[NSSCTF]prize_p5

前言 之前就学过反序列化的字符串逃逸 但是没怎么做题 补一下窟窿 题目 <?phperror_reporting(0);class catalogue{public $class;public $data;public function __construct(){$this->class "error";$this->data "hacker";}public functi…

全国省级金融发展水平数据集(2000-2022年)

01、数据简介 金融发展水平是一个国家或地区经济实力和国际竞争力的重要体现。它反映了金融体系的成熟程度和发展水平&#xff0c;是衡量一个国家或地区经济发展质量的重要指标。金融发展水平的提高&#xff0c;意味着金融体系能够更好地服务实体经济&#xff0c;推动经济增长…

计算机组成原理实验(一)--可控加减法电路设计实验

一、一位全加器的设计 视频学习链接&#xff1a;3-2-4 定点数的加法和减法运算 — 一位全加器的硬件逻辑实现_哔哩哔哩_bilibili 仿真电路图&#xff1a; 总结&#xff1a;奇数个1时Si输出为1&#xff0c;偶数个1输出为0&#xff1b;1的个数大于等于2时&#xff0c;Ci输出1 实…

探索设计模式的魅力:AI赋能分层模式,解构未来,智领风潮

​&#x1f308; 个人主页&#xff1a;danci_ &#x1f525; 系列专栏&#xff1a;《设计模式》 &#x1f4aa;&#x1f3fb; 制定明确可量化的目标&#xff0c;坚持默默的做事。 探索设计模式的魅力&#xff1a;AI赋能分层模式&#xff0c;解构未来&#xff0c;智领风潮 ✨欢迎…

Veeam配置备份oracle实例

Veeam是一家专门提供数据管理和数据保护解决方案的软件公司。他们的产品主要包括备份、复制和虚拟化管理等功能&#xff0c;旨在帮助企业保护其数据、应用程序和系统&#xff1b;NBU&#xff0c;COMMVALT&#xff0c;Veeam 国际三大知名备份软件厂商。本文介绍使用Veaam 备份Li…

详细解析什么是期权交易的获利方法

期权交易的获利方法 在期权交易之前进行充分的准备工作和风险评估是至关重要的。其中行情结构、策略方法、预期收益和风险评估&#xff0c;是期权交易成功的关键要素。它们能帮助我们更好地制定交易计划&#xff0c;控制风险&#xff0c;并追求稳定的利润。以下是对这四点的详…