代理模式
当然,以下是一个关于代理模式的Markdown文件,展示了C#的一个简单案例。
代理模式 (Proxy Pattern)
代理模式是一种设计模式,它为其他对象提供一种代理以控制对这个对象的访问。常见的代理类型包括远程代理(远程控制对象)、虚拟代理(延迟加载对象)和保护代理(控制对对象的访问权限)。
结构#
代理模式主要包含以下角色:
- 抽象主题(Subject): 定义真实对象和代理对象的共同接口。
- 真实主题(RealSubject): 实现抽象主题的真实对象。
- 代理(Proxy): 通过包含对真实主题的引用来控制对真实对象的访问。
UML 类图#
+-----------+
| Subject |
+-----------+
| +Request()|
+-----------+
^
|
|
|
+---------------+ +--------------------------+
| RealSubject | | Proxy |
+---------------+ +--------------------------+
| +Request() |<------| +Request() |
+---------------+ +--------------------------+
| -realSubjecT:RealSubject |
+--------------------------+
示例代码#
以下是一个使用C#实现的代理模式示例。
抽象主题 (Subject)#
public interface ISubject
{
void Request();
}
真实主题 (RealSubject)#
public class RealSubject : ISubject
{
public void Request()
{
Console.WriteLine("RealSubject: Handling Request.");
}
}
代理 (Proxy)#
public class Proxy : ISubject
{
private RealSubject _realSubject;
public void Request()
{
if (_realSubject == null)
{
_realSubject = new RealSubject();
}
Console.WriteLine("Proxy: Logging the time of request.");
_realSubject.Request();
}
}
客户端代码#
class Program
{
static void Main(string[] args)
{
ISubject proxy = new Proxy();
proxy.Request();
}
}
运行结果#
Proxy: Logging the time of request.
RealSubject: Handling Request.
分析#
在上面的示例中,客户端代码通过代理对象Proxy
调用Request
方法。代理对象Proxy
控制对真实对象RealSubject
的访问,并且可以在调用真实对象的Request
方法之前或之后执行一些操作,例如日志记录。这种方式将实际的操作委托给RealSubject
对象。
优点#
- 控制对象访问: 可以在访问对象时增加额外的逻辑,例如权限验证、延迟加载等。
- 减少对象加载开销: 在需要的时候才创建对象,节省资源。
缺点#
- 增加复杂性: 引入额外的类和间接层次,使系统变得更复杂。
- 延迟请求处理: 由于代理的引入,可能会导致请求处理的延迟。
适用场景#
- 远程代理: 代理位于不同地址空间时使用。
- 虚拟代理: 需要控制访问对象的创建和初始化。
- 保护代理: 控制对象访问权限。
适用于以下场景:代理模式在实际开发中非常有用,尤其是在需要控制对对象的访问或在访问对象之前需要执行某些操作时。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现