【设计模式】代理模式

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

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

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

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

举例场景:

· 延时加载

相关推荐
用户298698530149 小时前
PDF 转纯文本(TXT)免费攻略:轻松提取文字内容
人工智能·后端·c#
孙克旭_9 小时前
单链表进阶实操:5 道常考面试题详细解析【Java 实现】
java·开发语言·数据结构·单链表
斑马1399 小时前
Linux软件编程学习笔记(五)——线程
开发语言·php
吴声子夜歌9 小时前
Java——数组和集合(一)
java·开发语言
呆呆敲代码的小Y9 小时前
Lua 上值(UpValue)
开发语言·junit·lua·lua上值·upvalue
呆呆敲代码的小Y9 小时前
【游戏开发】C# 中的迭代器
java·开发语言·c#·迭代器
benchmark_cc9 小时前
K 线数据断层会对回测造成什么影响?从一个缺失交易日看懂量化策略为什么会失真
大数据·开发语言·数据分析·量化·股票数据·quantdash·量化数据源
benchmark_cc10 小时前
数据 API 稳定性为什么会影响量化策略?从数据获取到信号执行的完整分析
开发语言·python·数据分析·量化·股票数据·quantdash·量化数据源
码匠许师傅10 小时前
【设计模式精讲】7.建造者模式(Builder)
设计模式·建造者模式
2601_9621803310 小时前
python——Django 框架
开发语言·python·django