代理模式(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
相关推荐
Boilermaker19928 小时前
[Java 并发编程] Synchronized 锁升级MM_MS8 小时前
Halcon变量控制类型、数据类型转换、字符串格式化、元组操作玩泥巴的9 小时前
飞书 .NET SDK 事件处理的幂等性与去重机制꧁Q༒ོγ꧂9 小时前
LaTeX 语法入门指南njsgcs9 小时前
ue python二次开发启动教程+ 导入fbx到指定文件夹alonewolf_999 小时前
JDK17新特性全面解析:从语法革新到模块化革命在路上看风景9 小时前
3.2 FileStreamzwm2698888159 小时前
6号楼 部分声光24v电压达不到,显示11v古城小栈9 小时前
Rust 迭代器产出的引用层数——分水岭ghie90909 小时前
基于MATLAB的TLBO算法优化实现与改进