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

代理模式

时间:2023-03-25 12:02:08浏览次数:30  
标签:对象 Request 代理 模式 Proxy RealSubject


一、作用

代理模式,也称为委托模式,作用就是找一个对象来替我们访问某个对象;
意图:为其它对象提供一种代理以控制对这个对象的访问;

代理模式就像我们生活中有些不方便自己直接出面处理的事情,然后找一个中间人替我们去处理;

例如:我们来到一个新的城市,需要租房,但是你又不知道哪里有好的房源,所以你找到了中介,去帮你找好的房源;
那么你就是下图中的RealSubject,中介就是Proxy,Request()就是租房


二、UML类图

代理模式_#include

  • Subject:抽象主题角色,定义Proxy和RealSubject的共用接口,这样就可以在任何使用RealSubject的地方,都可以使用Proxy;
  • RealSubject:具体主题角色,被代理角色,真实处理业务的角色,是业务逻辑的具体执行者;
  • Proxy:代理主题角色,代理角色,保存一个引用使得代理可以访问实体;

三、代码实现

#include <iostream>
#include <string>
using namespace std;


//Subject
class Subject
{
public:
    virtual void Request() = 0;
};


//RealSubject
class RealSubject :public Subject
{
public:
    void Request()
    {
        cout << "小明需要租一间房子!" << endl;
    }
};

//Proxy
class Proxy :public Subject
{
public:
    Proxy (Subject* subject) :m_subject(subject){}
    void Request()
    {
        m_Person->Request();
        cout << "中介抽取佣金百分之10!" << endl;
    }
private:
    Subject* m_subject;
};

//场景
int main()
{
    //小明
    Subject *xiaoM = new RealSubject;

    //找一个中介帮忙租房子
    Subject *intermediary = new Proxy(xiaoM);

    intermediary->Request();
    
    return 0;
}

结果:
小明需要租一间房子!
中介抽取佣金百分之10!
请按任意键继续. . .

四、优缺点

优点

  • 职责清晰。代理模式能够协调调用者和被调用者,在一定程度上降低了系统的耦合度;
  • 高扩展性。可以灵活隐藏被代理对象的部分功能和服务,更可灵活增加额外的功能和服务。

缺点

  • 由于客户端与真实主题间增加了代理对象,故有些类型的代理模式可能导致请求处理的速度变慢;
  • 实现代理模式需要额外的工作,有些代理模式实现起来比较复杂。

五、适用场景

根据目的和实现方式的不同,代理模式可分为很多种,常见的有:

  • 远程代理(Remote Proxy)
    为一个位于不同地址空间的对象提供一个本地代理,对代理的方法调用会导致对远程对象的方法调用。ATM 就是一个例子,ATM 可能会持有(存在于远程服务器中的)银行信息的一个代理对象。
  • 虚拟代理(Virtual Proxy)
    使用虚拟代理,代理可以作为一个(资源消耗较大的)对象的代表。虚拟代理经常延迟对象的创建,直到需要为止。在创建对象之前(及创建对象过程中),虚拟代理也可以作为对象的代理;之后,代理将请求直接委托给 RealSubject。
  • 保护代理(Protection Proxy)
    根据访问权限,可以使用保护代理来控制对资源的访问。例如,有一个员工对象,保护代理可以允许普通员工调用对象的某些方法,管理员调用其他方法。
  • 缓冲代理(Cache Proxy)
    为某一个目标操作的结果提供临时的存储空间,以便多个客户端可以共享这些结果。
  • 智能引用代理(Smart Reference Proxy)
    当一个对象被引用时,提供一些额外的操作(例如:将对象被调用的次数记录下来)。


标签:对象,Request,代理,模式,Proxy,RealSubject
From: https://blog.51cto.com/wangjichuan/6149149

相关文章

  • SAP UI5 sap.m.Table 实现响应式布局的两种配置模式
    响应式配置有两种方式:自动弹出模式和手动弹出模式(sap.m.Table,属性:autoPopinMode)。自动弹出模式(autoPopinMode)确保自动响应,并且在大多数场合下已经足够。开发人员仍然可......
  • 读从瀑布到敏捷一 漫画解读软件开发模式变迁史
    软件开发模式有瀑布模型、敏捷开发、看板、SCRUM和精益软件开发,除了瀑布模型,其他模型有着不可分割的关系。所谓瀑布模型,就是说,软件开发是按照一定顺序展开的(传统线性生产......
  • 动态代理
    动态代理思想的分析我们想在已经可以运行的代码中添加右侧的2行代码在种情况下如果我们直接修改,被称为侵入式修改,很可能和导致我们的所以代码都崩溃我们又不能修改原......
  • jdk的动态代理
    jdk动态代理:(jdk动态代理,必须有接口)1-Calculator接口内容:publicinterfaceCalculator{intadd(inti,intj);intsub(inti,intj);intmul(inti,......
  • 详解shell语法检查模式
    启用verbose调试模式在进入本指导的重点之前,让我们简要地探索下 verbose模式。它可以用-v调试选项来启用,它会告诉 shell 在读取时显示每行。要展示这个如何工作,下......
  • 软件设计模式分类
     CreationalPatterns(创建型设计模式):SingletonPattern(单例模式)   PrototypePattern(原型模式)FactoryMethodPattern(工厂方法模式)   AbstractFac......
  • 华为云Classroom聚焦人才数字化转型,引领智慧教育改革新模式
    随着教育行业数字化转型进程加快,利用现代化云端技术手段,线上线下相结合方式建立的全新OMO产教融合一体化已成为行业趋势。华为云Classroom平台沉淀了华为多年研发实践经验和......
  • 在同一网络下手机通过代理服务连接电脑的socks
    让手机和电脑连接同一WiFi,查看电脑的IP地址。此为192.168.1.100ipconfig2.打开电脑的socks,并查看端口,此端口为108083.打开手机WIFI连接,选择高级设置,点击代理,选择......
  • SpringBoot中配置为开发模式,代码修改后不用重新运行
    场景SpringBoot中配置为开发模式,修改代码后不用重新运行。实现打开pom.xml,添加依赖<!--添加如下依赖,配置为开发模式,代码做了修改,不用重新运行--><!--https://mvnrepos......
  • PLG SaaS 产品 Figma 商业模式拆解
    9月15日,Figma的CEODylanField发布消息:今天,Figma宣布接受Adobe的收购...Adobe以约200亿美元收购Figma,这也是Adobe该公司在其历史上的最大一笔收购。那是......