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

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

代理设计模式

  • 🚩什么是代理设计模式?
  • 🚩代理设计模式的特点
  • 🚩代理设计模式的结构
  • 🚩代理设计模式的优缺点
  • 🚩代理设计模式的Java实现
  • 🚩代码总结
  • 🚩总结

🚩什么是代理设计模式?

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

使用场景

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

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

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

🚩代理设计模式的特点

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

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

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

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

🚩代理设计模式的结构

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

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

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

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

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

🚩代理设计模式的优缺点

✅ 优点

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

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

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

❌ 缺点

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

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

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

🚩代理设计模式的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 {

    @Override
    public 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;
    }

    @Override
    public 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() 返回的同步集合代理

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

在这里插入图片描述

相关文章:

  • 8路CXP相机采集系统介绍
  • 18,C++——哈希
  • win32汇编环境,网络编程入门之十一
  • 计算机网络入门:物理层与数据链路层详解
  • Apache Spark - 用于大规模数据分析的统一引擎
  • 原开源鸿蒙仓库停止更新
  • 【Pandas】pandas Series plot.pie
  • ffmpeg系列(三)—— 音频重采样
  • Edge打不开证书失效的网站
  • Spring、Spring Boot与Spring Cloud深度解析:核心关系与实战应用指南
  • Trae开发贪食蛇小游戏
  • 低代码理解
  • Socket编程UDP
  • C++实用函数:find与find_if
  • 智能汽车图像及视频处理方案,支持视频星轨拍摄能力
  • 【机器学习基础 4】 Pandas库
  • 移植原包ROM通用处理方案
  • 作业12 (2023-05-15 指针概念)
  • Hostapd2.11解析笔记_nl80211接口交互流程_消息收发细节解析
  • vue js给元素动态添加动画样式, 改变背景色
  • 七部门联合发布《终端设备直连卫星服务管理规定》
  • 城市更新·简报│中央财政支持城市更新,倾斜超大特大城市
  • 融创服务全面退出彰泰服务集团:约8.26亿元出售广西彰泰融创智慧80%股权
  • 辽宁辽阳市白塔区一饭店发生火灾,当地已启动应急响应机制
  • 2024“好评中国”网络评论大赛结果揭晓
  • 五一假期如何躺赚利息?来看国债逆回购操作攻略