【设计模式】代理模式

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

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

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

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

举例场景:

· 延时加载

相关推荐
無限進步D3 小时前
Java 运行原理
java·开发语言·入门
是苏浙3 小时前
JDK17新增特性
java·开发语言
阿里加多7 小时前
第 4 章:Go 线程模型——GMP 深度解析
java·开发语言·后端·golang
likerhood7 小时前
java中`==`和`.equals()`区别
java·开发语言·python
zs宝来了8 小时前
AQS详解
java·开发语言·jvm
telllong8 小时前
Python异步编程从入门到不懵:asyncio实战踩坑7连发
开发语言·python
wjs202410 小时前
JavaScript 条件语句
开发语言
阿里加多10 小时前
第 1 章:Go 并发编程概述
java·开发语言·数据库·spring·golang
2301_7926748611 小时前
java学习day29(juc)
java·开发语言·学习
周末也要写八哥11 小时前
MATLAB R2025a超详细下载与安装教程(附安装包)
开发语言·matlab