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

《设计模式》代理模式

1.代理模式定义

代理模式(Proxy):为其他对象提供一种代理以控制对这个对象的访问。

1.1 UML图:

  • Subject(主题接口) :定义了真实对象和代理对象的共同接口。
  • RealSubject(真实主题类) :定义了代理类所代表的真实对象,通常实现了Subject接口。
  • Proxy(代理类) :持有RealSubject的引用,并在请求传递给RealSubject之前或之后进行一些操作。
    在这里插入图片描述

1.2 核心代码:

public class DemoCode {public static void main(String[] args){System.out.println("**********************************************");System.out.println("代理模式");System.out.println();Proxy proxy = new Proxy();proxy.request();System.out.println();System.out.println("**********************************************");}
}//ISubject接口
interface ISubject{void request();
}//RealSubject类
class RealSubject implements ISubject {public void request(){System.out.println("真实的请求。");}}//Proxy类
class Proxy implements ISubject{private RealSubject rs;public Proxy(){this.rs = new RealSubject();}public void request(){this.rs.request();}
}

执行结果:
在这里插入图片描述

2. 代理模式的优缺点;

优点:

  • 提供了对真实对象的控制,可以增加额外的功能,比如访问控制、缓存、延迟加载、日志记录等等。
  • 通过动态代理可以减少代码冗余,提高代码的灵活性和可扩展性。

缺点:

  • 增加了系统的复杂度,因为每个真实对象都需要有一个代理类来配合工作。
  • 如果代理层次过多,可能会影响性能,尤其是动态代理在性能上会有一定的损耗。

应用场景:

1.延迟加载:当一个对象的创建成本非常高,且不一定每次都需要使用该对象时,可以通过代理来控制对象的创建时机,避免不必要的资源浪费。
2.访问控制:通过代理类可以控制对原对象的访问权限,只有在满足特定条件下才允许访问。
3.远程代理:当对象在远程服务器上时,可以通过代理类来模拟远程对象的行为。
4.日志记录和性能监控:在代理类中可以加入日志记录、性能监控等功能,不需要修改真实对象的代码。

3. 总结

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

4.参考

  • https://cloud.tencent.com/developer/article/2012049
  • https://juejin.cn/post/7496345865231597579#heading-15
http://www.xdnf.cn/news/18056.html

相关文章:

  • 基于Python的电影评论数据分析系统 Python+Django+Vue.js
  • 【运维心得】三步10分钟拆装笔记本键盘
  • Langfuse2.60.3:独立数据库+docker部署及环境变量详细说明
  • 数据清洗处理
  • 【数据结构】深入理解单链表与通讯录项目实现
  • 【洛谷刷题】用C语言和C++做一些入门题,练习洛谷IDE模式:分支机构(一)
  • 典型 RAG实现:NFRA智能问答系统实战的总结与反思
  • 数据结构:迭代方法(Iteration)实现树的遍历
  • ubuntu更新chrome版本
  • 平滑方法(smoothing)
  • 零知开源——基于STM32F407VET6的TCS230颜色识别器设计与实现
  • 两个简单的设计模式的例子
  • 【轨物方案】预防性运维:轨物科技用AI+机器人重塑光伏电站价值链
  • JavaScript 核心语法与实战笔记:从基础到面试高频题
  • NLP:Transformer模型构建
  • 驱动开发系列63 - 配置 nvidia 的 open-gpu-kernel-modules 调试环境
  • ES操作手册
  • 在本地部署Qwen大语言模型全过程总结
  • Linux -- 线程概念与控制
  • 【DDIA】第三部分:衍生数据
  • AI优质信息源汇总:含X账号,Newsletter,播客,App
  • python中的reduce函数
  • 2025戴尔科技峰会:破局者的力量与智慧
  • [ CSS 前端 ] 网页内容的修饰
  • 低资源语言翻译:数据增强与跨语言迁移学习策略
  • 蛋白质设计新高度,RFdiffusion 实现从零设计高亲和力蛋白质
  • Redis核心应用场景及代码案例
  • wordpress忘记密码怎么办
  • kubernetes(4) 微服务
  • [激光原理与应用-285]:理论 - 波动光学 - 无线电磁波的频谱分配