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

《设计模式》代理模式

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.lryc.cn/news/623257.html

相关文章:

  • Java 9 新特性及具体应用
  • 什么是微前端?
  • XC6SLX45T-2FGG484C Xilinx AMD Spartan-6 FPGA
  • 两个简单的设计模式的例子
  • [Linux] Linux文件系统基本管理
  • 没学过音乐怎么写歌?豆包 + 蘑兔
  • Python Condition对象wait方法使用与修复
  • 《设计模式》装饰模式
  • Tello无人机与LLM模型控制 ROS
  • 二十六、Mybatis-XML映射文件
  • 行为型设计模式:对象协作的舞蹈家(中)
  • 从0到1掌握 Spring Security(第三篇):三种认证方式,按配置一键切换
  • RH134 访问网络附加存储知识点
  • 从舒适度提升到能耗降低再到安全保障,楼宇自控作用关键
  • 19.3 Transformers量化模型极速加载指南:4倍推理加速+75%显存节省实战
  • 立体匹配中的稠密匹配和稀疏匹配
  • RK3568 NPU RKNN(二):RKNN-ToolKit2环境搭建
  • 《MySQL 数据库备份与视图创建全流程:从数据迁移到高效查询实战》
  • MySQL的下载安装(MSI和ZIP版本都有)
  • 利用Qwen大模型进行c++11并发库的学习,与时俱进!!!!
  • 从频繁告警到平稳发布:服务冷启动 CPU 风暴优化实践01
  • 同创物流学习记录1
  • 发文暴论!线性注意力is all you need!
  • 【leetcode】12. 整数转罗马数字
  • 双椒派E2000D开发板LED驱动开发实战指南
  • 【手撕JAVA多线程】1.从设计初衷去看JAVA的线程操作
  • ESP32 C3 开发板使用教程 01-测试显示屏
  • 数据结构之heap算法
  • ollama 自定义模型
  • 黑板架构详解