23种设计模式-代理(Proxy)设计模式

server/2025/3/31 20:43:59/

代理设计模式

🚩什么是代理设计模式

代理设计模式(Proxy Pattern) 是一种 结构型设计模式,它为其他对象提供一种 代理 以控制对这个对象的访问。代理模式通过创建一个代理对象,在客户端和目标对象之间起到 中介作用,可以在不改变原始类代码的情况下增加额外的功能。

使用场景

  • 当需要 控制对对象的访问 时(如权限控制、延迟加载等)

  • 当需要 为对象提供额外功能 时(如日志记录、性能监控等)

  • 当需要 远程访问对象 时(如RPC调用)

🚩代理设计模式的特点

  • 中介作用:代理对象在客户端和目标对象之间起中介作用

  • 透明性:客户端无需知道使用的是代理还是真实对象

  • 功能扩展:可以在不修改目标对象的情况下增加额外功能

  • 访问控制:可以控制客户端对目标对象的访问

🚩代理设计模式的结构

代理模式主要包含以下部分:

  • Subject(抽象主题):定义真实主题和代理主题的共同接口

  • RealSubject(真实主题):实现真正的业务逻辑

  • Proxy(代理):持有真实主题的引用,控制对真实主题的访问

  • Client(客户端):通过代理对象间接访问真实主题

图例:

在这里插入图片描述

🚩代理设计模式的优缺点

✅ 优点

  • 职责清晰:真实主题只需关注核心业务逻辑

  • 高扩展性:可以在不修改目标对象的情况下增加功能

  • 智能化:代理可以实现延迟加载、访问控制等智能功能

❌ 缺点

  • 增加系统复杂度:引入了额外的代理层

  • 性能开销:代理调用会带来额外的处理时间

  • 可能违反开闭原则:某些代理实现可能需要修改代理类

Java_62">🚩代理设计模式Java实现

代码地址:GitHub

  • 创建 抽象主题 Subject 接口
/*** @author hanson.huang* @version V1.0* @InterfaceName Subject* @Description 抽象主题 Subject* @date 2025/3/24 19:16**/
public interface Subject {public void buy();
}
  • 创建 真实主题 RealSubject
/*** @author hanson.huang* @version V1.0* @ClassName RealSubject* @Description 真实主题 RealSubject* @date 2025/3/24 19:17**/
public class RealSubject implements Subject {@Overridepublic void buy() {System.out.println("付钱");}
}
  • 创建 代理 Proxy
/*** @author hanson.huang* @version V1.0* @ClassName Proxy* @Description 代理 Proxy* @date 2025/3/24 19:17**/
public class Proxy implements Subject {protected RealSubject realSubject;public Proxy(RealSubject realSubject) {this.realSubject = realSubject;}@Overridepublic void buy() {System.out.println("办理购买前的手续");realSubject.buy();System.out.println("办理购买后的手续");}
}
/*** @author hanson.huang* @version V1.0* @ClassName ProxyPattern* @Description 测试代理模式* @date 2025/3/24 19:08**/
public class ProxyPattern {public static void main(String[] args) {RealSubject realSubject = new RealSubject();Proxy proxy = new Proxy(realSubject);proxy.buy();}
}

📌 运行结果

在这里插入图片描述

🚩代码总结

  • 抽象主题 Subject 定义了真实主题和代理的共同接口

  • 真实主题 RealSubject 实现了核心业务逻辑

  • 代理 Proxy 控制对真实主题的访问并添加额外功能

  • 客户端 通过代理对象间接访问真实主题

🚩总结

  • 代理设计模式 通过引入代理对象控制对目标对象的访问

  • 核心是 在不改变原始类的情况下增加额外功能

  • 适用于 访问控制功能增强远程调用 等场景

Java源码中的应用场景:

  1. Java动态代理:

    • java.lang.reflect.Proxy

    • 广泛应用于Spring AOP中

  2. RMI远程调用:

    • java.rmi.* 包中的远程对象代理
  3. MyBatis:

    • Mapper接口的代理实现

    • org.apache.ibatis.binding.MapperProxy

  4. Spring框架:

    • 事务管理的代理实现

    • 安全控制的代理实现

  5. Hibernate:

    • 延迟加载使用代理实现

    • org.hibernate.proxy.ProxyFactory

  6. Java标准库:

    • Collections.unmodifiableList() 返回的不可修改集合代理

    • Collections.synchronizedList() 返回的同步集合代理

创作不易,不妨点赞、收藏、关注支持一下,各位的支持就是我创作的最大动力❤️

在这里插入图片描述


http://www.ppmy.cn/server/179994.html

相关文章

干货分享|DeepSeek技术革命、算力范式重构与场景落地洞察

本文为TsingtaoAI公司负责人汶生为某证券公司管理层和投资者教授的《DeepSeek技术革命、算力范式重构与场景落地洞察》主题培训内容,此次主题培训系统阐述了当前AI技术演进的核心趋势、算力需求的结构性变革,以及行业应用落地的关键路径。 现在我们将全…

【Python爬虫】使用python脚本拉取汽车网站品牌数据

示例代码说明: 在汽车之家网站拉取当月排行榜中汽车品牌、销量和价格信息,存为csv文档输出,使用正则表达式获取网页内容 import re import pandas as pd import requests# 汽车之家车型列表页URL url https://cars.app.autohome.com.cn/ca…

【redis】数据类型之Stream

Redis Stream是Redis 5.0版本引入的一种新的数据类型,它提供了一种持久化的、可查询的、可扩展的消息队列服务。 它结合了Redis高性能的特性与持久化能力,支持: 多消费者组模式(Consumer Groups)消息回溯&#xff08…

vue数字公式篇 Tinymce结合使用(二)

继上一篇的数字公式 , 这次的功能是将公式能插入编辑器以及修改 1、Tinymce 自定义 LateX 按钮,打开公式编辑器窗口 LateX.vue window.tinymce.init({...//基础配置这里我就不写了setup(ed) {//自定义 LateX 按钮ed.ui.registry.addButton(LateX, {text:…

vscode连接服务器失败问题解决

文章目录 问题描述原因分析解决方法彻底删除VS Code重新安装较老的版本 问题描述 vscode链接服务器时提示了下面问题: 原因分析 这是说明VScode版本太高了。 https://code.visualstudio.com/docs/remote/faq#_can-i-run-vs-code-server-on-older-linux-distribu…

面试提问:数仓建设中维度退化一般在哪一层做?可不可以不进行维度退化?

前言 面试提问:最近小A同学去某零售公司面试,面试快结束的时候,面试官抛出这么一个问题:数仓建设中维度退化你们是在哪一层做的?小A同学很爽快的回答道,我们通常是在DWD层进行维度退化。接着面试官继续问道:维度退化为什么不在DWS层做?可不可以不进行维度退化?面试结…

无人机宽带自组网机载电台技术详解,50KM超远图数传输系统实现详解

以下是关于无人机宽带自组网机载电台技术以及50KM超远图数传输系统实现的详解: 无人机宽带自组网机载电台技术详解 无人机宽带自组网机载电台是一种专门为无人机设计的通信设备,它支持宽带数据传输和自组网功能。这种电台的实现技术涉及多个方面&#x…

利用 MATLAB/Simulink 建立完整的控制系统模型,并进行阶跃响应和负载扰动响应仿真

-利用 MATLAB/Simulink 建立完整的控制系统模型,包括单一控制回路(电流、速度、位置)和整个系统的级联模型 仿真任务包括验证各回路的阶跃响应、负载扰动响应等,确保系统在动态性能上满足设计要求。 以下是在MATLAB/Simulink中建立完整控制系统模型(包含单一控制回路和级联…