代理模式(Proxy Pattern)
概念:
· 一种结构型设计模式;
· 为其他对象提供一种代理以控制对这个对象的访问;
· 代理可以在真实对象实现的前后进行必要的对实现的补充;
UML结构:
csSubject(抽象主题) ^ | ------------------------------ | | RealSubject(真实主题) Proxy(代理) | 持有 RealSubject 引用代码示例:
cs/// <summary> /// 主题抽象类 /// </summary> public abstract class Subject { public abstract void Request(); } /// <summary> /// 真实主题实现类 /// </summary> public class RealSubject : Subject { public override void Request() { Console.WriteLine("真实主题:处理请求"); } } /// <summary> /// 代理类 /// </summary> public class Proxy : Subject { private RealSubject _realSubject; public override void Request() { if (_realSubject == null) { _realSubject = new RealSubject(); } Console.WriteLine("代理:在调用真实主题之前,可以执行额外操作"); _realSubject.Request(); Console.WriteLine("代理:在调用真实主题之后,可以执行额外操作"); } } /// <summary> /// 客户端 /// </summary> public class Client { public static void Main() { Subject proxy = new Proxy(); proxy.Request(); } }特点:
优点:· 控制访问:可以在不改变真实对象的情况下,控制对它的访问逻辑;
· 扩展功能:代理可以在调用前后附加功能,比如权限、日志、统计等等;
· 延迟加载:可以实现延迟加载,只有在真正需要时才创建,节省资源;
· 远程代理:客户端通过代理向本地一样调用远程对象;
缺点:· 增加了系统的复杂度;
· 可能影响了性能;
· 滥用可能会导致代码的臃肿;
适用场景:
· 远程代理:为远程对象提供本地代理(如.NET Remoting、WebService);
· 虚拟代理:需要大量资源的对象,延迟加载(大图像、视频等等);
· 保护代理:控制不同用户对目标对象的访问权限;
· 智能指引:访问对象时提供额外服务;
举例场景:
· 延时加载
【设计模式】代理模式
大飞pkz2025-09-30 14:16
相关推荐
Data_Journal17 分钟前
如何使用 Java 和 Jsoup 解析 HTML吃好睡好便好27 分钟前
MATLAB仿真框图2今天的砖头有点烫手啊39 分钟前
AI Agent 开发实战(十):Agent 设计模式(ReAct / Plan-Execute / Reflection)董员外1 小时前
RAG 系统进化论(十):可运营 RAG,从原型到长期运行的知识系统小当家.1051 小时前
MCP 协议深度解析:AI 领域的 USB-C 接口accept 99%2 小时前
python版提取 PDF 的常用第三方库与工具lzhdim2 小时前
C# 通过 Windows API 实现进程内存读写操作-银雾鸢尾-2 小时前
C#中的预处理指令Livia要学习2 小时前
Python面向对象三大特性:封装、继承、多态dalong102 小时前
Savitzky-Golay 的C# 实现