代理模式(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
相关推荐
Ray Liang3 小时前
用六边形架构与整洁架构对比是伪命题?七月丶7 小时前
别再手动凑 PR 了:这个 AI Skill 会按仓库习惯自动建分支、拆提交、提 PR刀法如飞7 小时前
从程序员到架构师:6大编程范式全解析与实践对比九狼7 小时前
Flutter + Riverpod +MVI 架构下的现代状态管理静水流深_沧海一粟1 天前
04 | 别再写几十个参数的构造函数了——建造者模式StarkCoder1 天前
从UIKit到SwiftUI的迁移感悟:数据驱动的革命阿星AI工作室1 天前
给openclaw龙虾造了间像素办公室!实时看它写代码、摸鱼、修bug、写日报,太可爱了吧!_哆啦A梦2 天前
Vibe Coding 全栈专业名词清单|设计模式·基础篇(创建型+结构型核心名词)Scout-leaf3 天前
WPF新手村教程(三)—— 路由事件用户298698530143 天前
程序员效率工具:Spire.Doc如何助你一键搞定Word表格排版