当前位置: 首页 > news >正文

23种设计模式之代理模式(Proxy Pattern)

前言:大家好,我是小威,24届毕业生,在一家满意的公司实习。本篇文章将23种设计模式中的代理模式,此篇文章为一天学习一个设计模式系列文章,后面会分享其他模式知识。
如果文章有什么需要改进的地方还请大佬不吝赐教👏👏。
小威在此先感谢各位大佬啦~~🤞🤞
在这里插入图片描述

🏠个人主页:小威要向诸佬学习呀
🧑个人简介:大家好,我是小威,一个想要与大家共同进步的男人😉😉
目前状况🎉:24届毕业生,在一家满意的公司实习👏👏

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,我亲爱的大佬😘

以下正文开始
在这里插入图片描述

文章目录

  • 代理模式概念
  • 代理模式角色
  • 代理模式应用场景
  • 代理模式代码案例
  • 代理模式小结
  • 图书推荐

代理模式概念

代理模式是一种常用的结构性设计模式,它可以在不改变原始对象的情况下,为对象提供一个代替者或占位符,以控制对原始对象的访问。

代理模式分为两种类型:静态代理和动态代理。静态代理是指代理类在编译时已经确定并实现,而动态代理是指代理类在运行时动态生成的

代理模式角色

在代理模式中,有三个角色:

  • 抽象角色:定义了真实对象和代理对象的公共接口,这样在任何使用真实对象的地方都可以使用代理对象。

  • 真实角色:代表了真实对象,是我们要使用的对象。

  • 代理角色:代表了代理对象,它包含了一个指向真实对象的引用,从而可以操作真实对象。

代理模式应用场景

代理模式有多种应用场景,其中最常见的是远程代理、虚拟代理和保护代理。

远程代理:可以隐藏一个对象存在于不同地址空间的事实,使得客户端可以像调用本地对象一样调用远程对象。

虚拟代理:可以延迟对象的创建,只有到真正需要使用对象的时候才会创建,这样可以节省系统资源,提高程序的运行效率。

保护代理:控制对真实对象的访问,可以在真实对象被访问前进行权限检查和过滤等操作。

总的来说,代理模式可以提高系统的安全性、稳定性和灵活性,适用于各种复杂场景下的开发需求。

代理模式代码案例

以下是一个使用Java实现代理模式的例子:

首先,我们定义一个接口 Image,表示一个图片对象,其中 display() 方法用于显示图片。

public interface Image {void display();
}

然后,我们实现一个具体的图片对象类 RealImage,其中 display() 方法用于加载并显示图片。

public class RealImage implements Image {private String filename;public RealImage(String filename) {this.filename = filename;loadFromDisk();}private void loadFromDisk() {System.out.println("Loading " + filename);}public void display() {System.out.println("Displaying " + filename);}
}

接下来,我们创建一个代理对象类 ProxyImage,它持有一个 RealImage 对象,并在需要的时候才创建和加载该对象。

public class ProxyImage implements Image {private RealImage realImage;private String filename;public ProxyImage(String filename) {this.filename = filename;}public void display() {if (realImage == null) {realImage = new RealImage(filename);}realImage.display();}
}

最后,我们可以通过以下方式来测试代理模式的实现:

public class ProxyPatternTest {public static void main(String[] args) {Image image = new ProxyImage("test.jpg");image.display();System.out.println();// 第二次访问时,图片已经被加载过了,不再需要重新创建image.display();}
}

运行上述代码,输出如下:

Loading test.jpg
Displaying test.jpg

Displaying test.jpg

可以看到,在第一次访问时,代理对象创建了一个真实的图片对象,并调用其 display() 方法来加载并显示图片。在第二次访问时,代理对象直接调用真实的图片对象的 display() 方法,无需再去创建和加载图片。这样,代理模式就实现了对真实对象的访问控制和管理。

代理模式小结

代理模式是一种常见的结构性设计模式,它通过引入代理角色来控制对真实对象的访问,从而增强了系统的安全性、稳定性和灵活性。代理模式分为静态代理和动态代理两种类型,应用场景包括远程代理、虚拟代理和保护代理等

图书推荐

本期推荐书籍为《设计模式:可复用面向对象软件的基础(典藏版)》
业内知名的4人著作,本书是引导读者走出软件设计迷宫的指路明灯,凝聚了软件开发界几十年设计经验的结晶。

在这里插入图片描述
粉丝福利:评论区任意留言可参与活动抽奖(可评论最多五条,抽取三名欧皇)

京东自营购买链接:点击购买

好了,本篇文章就先分享到这里了,后续将会继续介绍23种设计模式之其他模式,感谢大佬认真读完支持咯~
在这里插入图片描述

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起讨论😁
希望能和诸佬们一起努力,今后我们顶峰相见🍻
再次感谢各位小伙伴儿们的支持🤞

在这里插入图片描述

http://www.lryc.cn/news/69661.html

相关文章:

  • 服务扫描与查点-渗透测试模拟环境(3)
  • Educational Codeforces Round 148 (Rated for Div. 2) 题解
  • Java自定义类:打造属于自己的编程世界
  • kubectl top pod输出的cpu、内存使用率是怎么计算的
  • Spring和SpringBoot常用注解(持续更新)
  • redis做异步消息处理
  • 图书管理系统可行性分析报告
  • 比较难掌握的几道数据库面试题及答案
  • AI已经成立社区了,一个个比真人还真
  • Qt实现DES ECB加密解密
  • 拼多多新阶段,透露出不寻常
  • 使用底层代码(无框架)实现卷积神经网络理解CNN逻辑
  • PID单环控制(位置环)
  • 内存基础知识
  • 快速入门matlab——运算方法
  • 2009.03-2022.06华证ESG季度评级(季度)
  • 【大数据模型】LeonardoAi让心中所想跃然纸上
  • 如何区别BI、大数据、信息化和数字化转型
  • ESP32-C2开发板Homekit例程
  • 快速搭建一个 Kubernetes+Crane 环境,以及如何基于 Crane 优化你的集群和应用初体验
  • 深度学习图像识别模型:递归神经网络
  • 上门家教预约小程序开发 良师就在你身边
  • CMake Practice 学习笔记五--cmake常用变量
  • Facebook 广告效果越来越差,怎么办?
  • Netty核心组件模块(三)
  • k8s 集群搭建详细教程
  • 国有行面试:掌握这11个测评要素
  • 云视如何实现流量转化
  • Metersphere+jar+beanshell+连接linux
  • 前端开发工程师如何提升个人审美