首页 > 其他分享 >重温设计模式 --- 代理模式

重温设计模式 --- 代理模式

时间:2023-07-11 11:46:24浏览次数:32  
标签:真实 Request 主题 重温 代理 --- Proxy RealSubject 设计模式

引言

代理模式是一种结构型设计模式,它允许您提供一个代理来控制对某个对象的访问。在某些情况下,直接访问对象可能会带来一些问题,比如安全问题、性能问题等。代理模式就是为了解决这些问题而设计的。

在代理模式中,有三个核心角色:抽象主题(Subject)真实主题(Real Subject)代理(Proxy)。抽象主题是一个接口或抽象类,它定义了真实主题和代理都要实现的方法。真实主题是实现抽象主题接口的类,它执行实际的业务逻辑。代理是也实现了抽象主题接口的类,它包含一个指向真实主题对象的引用,可以在不直接访问真实主题的情况下执行某些操作,比如控制访问权限、记录日志等。

抽象主题

定义抽象主题接口:

public interface ISubject
{
    void Request();
}

真实主题

定义真实主题类:

public class RealSubject : ISubject
{
    public void Request()
    {
        Console.WriteLine("RealSubject handles request.");
    }
}

代理类

定义代理类:

public class Proxy : ISubject
{
    private RealSubject realSubject;

    public void Request()
    {
        if (realSubject == null)
        {
            realSubject = new RealSubject();
        }

        Console.WriteLine("Proxy handles request.");
        realSubject.Request();
    }
}

在代理类中,我们在 Request方法中创建一个真实主题对象RealSubject(如果它还没有被创建),然后调用真实主题对象的 Request 方法。这样,在客户端代码中,我们只需要使用代理对象即可,而不需要直接访问真实主题对象。

客户端调用可以这样调用:

Proxy proxy = new Proxy();
proxy.Request();

输出:

Proxy handles request.
RealSubject handles request.

可以看到,代理对象成功地控制了对真实主题对象的访问,并在访问前后添加了额外的逻辑。

结论

代理模式主要提供一个代理来控制对某个对象的访问,代理模式通常运用在以下场景:

  • 远程访问
  • 延迟加载
  • 访问控制
  • 简化复杂API
  • 不更改现有代码的情况下添加线程安全功能

标签:真实,Request,主题,重温,代理,---,Proxy,RealSubject,设计模式
From: https://www.cnblogs.com/pandefu/p/17536304.html

相关文章

  • acwing -- 3358. 放养但没有完全放养
     利用计数的思想,把每个字母分配到26个桶中,下标从小到大排序,利用upper_bound即可判断#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>usingnamespacestd;intmain(){strings1,s2;cin>>s1>>s2;vector<......
  • acwing -- 3370. 牛年
     大模拟,本题我们可以唯一确定每头牛的相对年龄。若无法确定牛的相对年龄,可以用图论进行遍历。#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<unordered_map>usingnamespacestd;unordered_map<string,int>age,ord={{"Ox&......
  • 【雕爷学编程】Arduino动手做(158)---VL53L0X激光测距模块
    37款传感器与执行器的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止这37种的。鉴于本人手头积累了一些传感器和执行器模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里准备逐一动手尝试系列实验,不管成功(程序走通)与否,都会记录下来—小小的进步或是搞......
  • ICT应用解决方案12-WLAN工作原理
    ICT应用解决方案12-WLAN工作原理1WLAN工作流程1.1AP上线AP获取IP地址并发现AC,与AC建立连接,为确保AP能够上线,AC需预先配置如下内容:配置网络互通:配置DHCP服务器,为AP和STA分配IP地址,也可将AC设备配置为DHCP服务器配置AP到DHCP服务器间的网络互通;配置AP到AC之间的网络......
  • CF407E k-d-sequence
    Description我们称一个数列为一个好的\(k-d\)数列,当且仅当我们在其中加上最多\(k\)个数之后,数列排序后为一个公差为\(d\)的等差数列。你手上有一个由\(n\)个整数组成的数列\(a\)。你的任务是找到它的最长连续子串,使得满足子串为好的\(k-d\)数列。Solution如果一段......
  • dvwa-xss漏洞演示
    又叫CSS(CrossSiteScript),跨站脚本攻击原理:指的是恶意攻击者往Web页面里插入恶意JS代码,当用户浏览该页之时,嵌入其中Web里面的JS代码会被执行,从而达到恶意的特殊目的xss漏洞通常是通过php的输出函数将javascript代码输出到html页面中,通过用户本地浏览器执行的,所以xss漏洞关键就......
  • 永磁同步电机矢量控制C代码,全部从项目中总结得到,采用的S- 永磁同步电机矢量控制C代码,
    永磁同步电机矢量控制C代码,全部从项目中总结得到,采用的S-永磁同步电机矢量控制C代码,全部从项目中总结得到,采用的S-function模式仿真,与实际项目运行基本一致,可以直接复制代码移植到工程实践项目中去。ID:22390662457992412......
  • 【2023-07-09】连岳摘抄
    23:59人能尽自己的责任,就可以感觉到好像吃梨喝蜜似的,把人生苦酒的滋味给抵消了。                                                 ——狄更新你错了,你已经是星星了,......
  • 【2023-07-10】平静就美
    20:00驱散阴影最好的办法,就是把一切都摆在明面上。                                                 ——哈珀·李最近在看一本叫《臣服实验》的书。在看这本书之前,我......
  • MATLAB代码:电-气-热综合能源系统耦合优化调度 关键词:综合能源系统 优化调度 电气热耦
    MATLAB代码:电-气-热综合能源系统耦合优化调度关键词:综合能源系统优化调度电气热耦合仿真平台:MATLABYALMIP+cplex/gurobi主要内容:代码主要做的是一个考虑电网、热网以及气网耦合调度的综合能源系统优化调度模型,考虑了电网与气网,电网与热网的耦合,算例系统中,电网部分为10机39节......