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

23种设计模式-结构型模式之代理模式(Java版本)

Java 代理模式(Proxy Pattern)详解

🧭 什么是代理模式?

代理模式是结构型设计模式之一,为其他对象提供一个代理以控制对这个对象的访问

就像生活中的“经纪人”,你无法直接联系明星,但可以通过代理来安排见面或业务。


🧠 使用场景

  • 控制对象访问(权限控制)
  • 延迟加载(虚拟代理)
  • 远程代理(调用远程服务)
  • 增强原始对象功能(如日志、事务)

🏗️ 模式结构

  • Subject(抽象主题):定义代理与真实对象的公共接口
  • RealSubject(真实主题):实际执行操作的对象
  • Proxy(代理对象):控制对真实对象的访问

✅ 示例:上网代理

抽象接口

public interface Internet {void access(String site);
}

真实主题

public class RealInternet implements Internet {@Overridepublic void access(String site) {System.out.println("访问网站: " + site);}
}

代理类:禁止访问黑名单网站

import java.util.Arrays;
import java.util.List;public class InternetProxy implements Internet {private Internet realInternet = new RealInternet();private List<String> bannedSites = Arrays.asList("facebook.com", "youtube.com");@Overridepublic void access(String site) {if (bannedSites.contains(site)) {System.out.println("访问被禁止:" + site);} else {realInternet.access(site);}}
}

客户端调用

public class Main {public static void main(String[] args) {Internet internet = new InternetProxy();internet.access("google.com");internet.access("facebook.com");}
}

🧩 优点

  • 控制对象访问权限,保护真实对象
  • 降低系统耦合度,增强灵活性
  • 可扩展真实对象的功能(如添加日志、安全控制)

⚠️ 缺点

  • 增加系统类的数量
  • 部分代理模式可能引入性能开销

🍭 常见实现

  1. 静态代理:手动写代理类,上例就是静态代理。
  2. 动态代理(JDK Proxy):运行时生成代理类,接口必须存在。
  3. CGLIB 代理:用于没有接口的类,通过继承实现代理。

✅ 使用建议

适合用在:

  • 安全控制(如登录验证)
  • 缓存或延迟加载(如图片加载)
  • 远程调用(如 RPC、RMI)
  • 日志、事务等功能增强
http://www.xdnf.cn/news/67519.html

相关文章:

  • Fortran 2008标准引入了多项新特性,其中一些对性能有显著影响一些语言新特征
  • C++--负载均衡在线OJ
  • OpenCV 图形API(48)颜色空间转换-----将 LUV 颜色空间的图像数据转换为 BGR 颜色空间函数LUV2BGR()
  • 在Cursor编辑器上部署MCP(Minecraft Coder Pack)完整指南
  • 进程与线程:02 多进程图像
  • 深入理解React高阶组件(HOC):原理、实现与应用实践
  • 如何测试雷达与相机是否时间同步?
  • 高并发内存池项目
  • EMQX学习笔记
  • ECharts散点图-散点图14,附视频讲解与代码下载
  • Vue3 源码解析(六):响应式原理与 reactive
  • 解决go项目构建后不能夸Linux平台的问题
  • JavaScript-ES5 循环中的闭包 “共享变量” 问题
  • 部署本地Dify
  • 智能安全用电系统预防电气线路老化、线路或设备绝缘故障
  • Windows部署FunASR实时语音听写便捷部署教程
  • Python Cookbook-6.6 在代理中托管特殊方法
  • AI重塑网络安全:机遇与威胁并存的“双刃剑”时代
  • CI/CD
  • Servlet上传文件
  • 2025年渗透测试面试题总结-拷打题库10(题目+回答)
  • 软考 中级软件设计师 考点知识点笔记总结 day14 关系代数 数据库完整性约束
  • 计算机是如何工作的(上)
  • 23. git reset
  • 【形式化验证基础】活跃属性Liveness Property和安全性质(Safety Property)介绍
  • 计算机组成与体系结构:内存接口(Memory Interface)
  • 工具:下载vscode .vsix扩展文件及安装的方法
  • 可穿戴设备待机功耗需降至μA级但需保持实时响应(2万字长文深度解析)
  • 小天互连与DeepSeek构建企业智能化新生态
  • iframe下系统访问跨域问题解决办法