首页 > 其他分享 >代理模式

代理模式

时间:2024-05-29 10:22:17浏览次数:16  
标签:对象 Request 代理 模式 访问 Proxy RealSubject

当然,以下是一个关于代理模式的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. 保护代理: 控制对象访问权限。

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

标签:对象,Request,代理,模式,访问,Proxy,RealSubject
From: https://www.cnblogs.com/AILove/p/18219567

相关文章

  • 装饰模式
    以下是关于装饰模式的Markdown文件,其中包含C#示例代码:装饰模式(DecoratorPattern)装饰模式是一种结构型设计模式,它允许向一个现有的对象添加新的功能,同时又不改变其结构。这个模式创建了一个装饰类,用来包装原有的类,并在保持类方法签名完整的前提下,提供额外的功能。模式结构......
  • 设计模式:装饰模式(Decorator)
    设计模式:装饰模式(Decorator)设计模式:装饰模式(Decorator)模式动机模式定义模式结构时序图模式实现在单线程环境下的测试在多线程环境下的测试模式分析优缺点适用场景应用场景应用实例模式扩展参考设计模式:装饰模式(Decorator)装饰模式(Decorator)属于结构型模式(Structural......
  • nginx代理jenkins无法跳转问题
    我的jenkinsdockerrun-d--namejenkins-p7005:8080-eJENKINS_OPTS="--prefix=/jkns"-v/data/jenkins:/var/jenkins_home-v/data/app:/appjenkins/jenkins主要是需要加--prefix=/jknsnginx配置:location/jkns{proxy_set_headerReferer$http_refer......
  • uniapp实现PDA扫码(广播模式)
    1.进入开发者模式查看PDA的广播动作和广播标签2.在uni-app项目里新建一个公共组件就叫pda-scan吧,放到公共组件components中,目录:components/pda-scan/pda-scan.vue<template> <view> </view></template><scriptsetup>import{onShow,onHide,onLoad,onUnload}from......
  • 头条abogus与Js补环境代理Upgrade!
    声明本文章中所有内容仅供学习交流,抓包内容、敏感网址、数据接口均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关,若有侵权,请联系我立即删除!目标网站aHR0cHM6Ly93d3cudG91dGlhby5jb20v分析逆向流程星球蛮多人叫我分析头条的ab参数我们先打开......
  • 关于Visitor模式的一些看法
    访问者模式(Visitor)1.意图表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。2.适用性在下列情况下使用Visitor模式:一个对象结构包含很多类对象,它们有不同的接口,而你想对这些对象实施一些依赖于其具体类的操作。......
  • 设计模式——工厂三兄弟之简单工厂
    1.业务需求​大家好,我是菠菜。在介绍这期简单工厂设计模式前,我们先来看看这样的需求:制作一个简单的计算器,能够实现控制台输入俩个数以及运算符完成运算。2.初步实现实现第一版思路:​创建计算器类,控制台输入俩个数以及运算符,通过if条件输出运算结果。CalClient类:pu......
  • MySQL四种主要的存储引擎,约束条件null not null,严格模式,基本字段类型之整型,浮点型,
    ⅠMySQL之存储引擎【一】什么是存储引擎日常生活中文件格式有很多,并且针对不同的文件格式会有对应不同的存储方式和处理机制针对不同的数据应该有对应的不同的处理机制存储引擎就是不同的处理机制【二】MySQL四种主要的存储引擎【1】Innodb是MySQL5.5版本之后的默认存......
  • 选择海外代理IP需要注意什么?
    &nbsp;&nbsp;&nbsp;&nbsp;跨境电商近年来的兴起与发展,越来越多的跨境从业者从事该行业,但在从事跨境贸易中则需要海外IP代理来突破地域限制、提升访问速度和稳定性、防止账号关联以及保护隐私和安全。这些功能都有助于跨境电商企业在全球范围内拓展业务,提升竞争力,实现可持......
  • 选择海外代理IP需要注意什么?
    &nbsp;&nbsp;&nbsp;&nbsp;跨境电商近年来的兴起与发展,越来越多的跨境从业者从事该行业,但在从事跨境贸易中则需要海外IP代理来突破地域限制、提升访问速度和稳定性、防止账号关联以及保护隐私和安全。这些功能都有助于跨境电商企业在全球范围内拓展业务,提升竞争力,实现可持......