【设计模式】代理模式

代理模式(Proxy Pattern)

概念:

· 一种结构型设计模式;

· 为其他对象提供一种代理以控制对这个对象的访问;

· 代理可以在真实对象实现的前后进行必要的对实现的补充;

UML结构:

cs 复制代码
          Subject(抽象主题)
                 ^
                 |
   ------------------------------
   |                            |
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);

· 虚拟代理:需要大量资源的对象,延迟加载(大图像、视频等等);

· 保护代理:控制不同用户对目标对象的访问权限;

· 智能指引:访问对象时提供额外服务;

举例场景:

· 延时加载

相关推荐
万粉变现经纪人3 小时前
如何解决 pip install -r requirements.txt 私有索引未设为 trusted-host 导致拒绝 问题
开发语言·python·scrapy·flask·beautifulsoup·pandas·pip
qq_479875433 小时前
C++ std::Set<std::pair>
开发语言·c++
云知谷5 小时前
【C++基本功】C++适合做什么,哪些领域适合哪些领域不适合?
c语言·开发语言·c++·人工智能·团队开发
l1t6 小时前
DeepSeek辅助利用搬移底层xml实现快速编辑xlsx文件的python程序
xml·开发语言·python·xlsx
C_Liu_8 小时前
C++:list
开发语言·c++
my rainy days8 小时前
C++:友元
开发语言·c++·算法
小梁努力敲代码8 小时前
java数据结构--List的介绍
java·开发语言·数据结构
云知谷8 小时前
【HTML】网络数据是如何渲染成HTML网页页面显示的
开发语言·网络·计算机网络·html
从孑开始9 小时前
ManySpeech.MoonshineAsr 使用指南
人工智能·ai·c#·.net·私有化部署·语音识别·onnx·asr·moonshine
Deschen9 小时前
设计模式-外观模式
java·设计模式·外观模式