代理模式

当然,以下是一个关于代理模式的Markdown文件,展示了C#的一个简单案例。

代理模式 (Proxy Pattern)

代理模式是一种设计模式,它为其他对象提供一种代理以控制对这个对象的访问。常见的代理类型包括远程代理(远程控制对象)、虚拟代理(延迟加载对象)和保护代理(控制对对象的访问权限)。

结构#

代理模式主要包含以下角色:

  1. 抽象主题(Subject): 定义真实对象和代理对象的共同接口。
  2. 真实主题(RealSubject): 实现抽象主题的真实对象。
  3. 代理(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对象。

优点#

  1. 控制对象访问: 可以在访问对象时增加额外的逻辑,例如权限验证、延迟加载等。
  2. 减少对象加载开销: 在需要的时候才创建对象,节省资源。

缺点#

  1. 增加复杂性: 引入额外的类和间接层次,使系统变得更复杂。
  2. 延迟请求处理: 由于代理的引入,可能会导致请求处理的延迟。

适用场景#

  1. 远程代理: 代理位于不同地址空间时使用。
  2. 虚拟代理: 需要控制访问对象的创建和初始化。
  3. 保护代理: 控制对象访问权限。

适用于以下场景:代理模式在实际开发中非常有用,尤其是在需要控制对对象的访问或在访问对象之前需要执行某些操作时。

作者:zhuhy

出处:https://www.cnblogs.com/AILove/p/18219567

版权:本作品采用「署名-非商业性使用-相同方式共享 4.0 国际」许可协议进行许可。

posted @   zhuhy  阅读(10)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
more_horiz
keyboard_arrow_up light_mode palette
选择主题
menu
点击右上角即可分享
微信分享提示