代理模式(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
相关推荐
吃一碗粉只付一碗钱2 小时前
12-给SPA友好的401和403响应第九序言T3 小时前
Python 数据处理进阶(十八)批量处理同结构文件:一个文件夹一次跑完龙亘川4 小时前
构建城市公共安全数字底座:亘川智城智慧安防系统全维度解读程序喵大人4 小时前
【C++入门】内存模型与资源管理 - 09 shared_ptr 和 weak_ptr 解决共享,也带来代价Raas1005 小时前
AI网关部署方案?从部署到上线全流程专注仿真5 小时前
线性回归和逻辑回归算法详解jimy16 小时前
C++ 中的 `T&&`:右值引用与转发引用呆呆虫126 小时前
用 orjson 加速 SerpBase 响应解析:基准对比与注意事项心疼你的一切7 小时前
Python自动发邮件实战定时发报表Wang's Blog8 小时前
Java 项目实战:交友项目 - 用户体系集成总结