【设计模式】代理模式

代理模式(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);

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

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

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

举例场景:

· 延时加载

相关推荐
basketball616几秒前
C++ bitset 头文件完全指南
开发语言·c++
Kiling_07044 分钟前
Java IO流:字节流实战与性能优化
java·开发语言·php
玩c#的小杜同学8 分钟前
一周 AI 新鲜事|2026.05.25—2026.05.31
人工智能·程序人生·ai·c#·程序员创富
糯米团子74915 分钟前
javascript高频知识点
开发语言·前端·javascript
周杰伦fans20 分钟前
C# 异常继承深度解析:从设计原则到 sealed 关键字的奥秘
java·jvm·c#
Wonderful U29 分钟前
基于Python+Django的在线题库与智能阅卷系统:从痛点分析到完整实现
开发语言·python·django
码语智行29 分钟前
拦截器、接口限流、过滤器、防重发/幂等性功能说明
开发语言·网络·python
liulilittle33 分钟前
麻将牌堆渲染(Lua)
开发语言·lua
雨落在了我的手上43 分钟前
初始java(十七):常⽤⼯具类介绍
java·开发语言
凤凰院凶涛QAQ1 小时前
《Java版数据结构 & 集合类剖析》集合框架的封装设计与顺序表:“从 Iterable 到 ArrayList:集合框架的‘职业树“
java·开发语言·数据结构