结构型 代理模式

代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。 (不能改变对象接口)

代理模式

在不修改客户代码的前提下,对已有的类的对象上增加行为时使用。

使用场景:

远程代理:为一个对象的地址空间提供局部代表。 		==》通过代理,实际是做远程通信
虚拟代理:根据需要来创建开销较大的对象。		 ==》对开销大的对象做封装,真正使用时做整整委托调用
保护代理:用于对象应该具有不同访问权限的场景,控制对原始对象的访问。
智能指引:取代简单的指针,它在访问对象时执行一些附加操作。
-- 引自《设计模式:可复用面向对象软件的基础》

源码demo:

其实就是提供一个中间类或者接口,对要操作的目标类对象进行封装。

/************************************************
代理模式:
    1.定义代理接口
    2.代理类和被代理类去实现相同的接口
    3.在代理类中创建被代理的类,在接口中去调用被代理类的接口
使用:
    1.创建代理对象,在代理对象中实现了调用被代理类的接口
      从而看起来好像是调用的同一个接口,但是实际执行的是被代理类的函数
*************************************************/
#include <iostream>
#include <string>
using namespace std;

class Interface
{
public:
    virtual void Request() = 0;
    virtual ~Interface(){}
};
//目标实际类的定义
class RealClass : public Interface
{
public:
    virtual void Request()
    {
        cout << "真实的请求" << endl;
    }
};

//不用这个基类也可以的 这是代理类的实现
//通过代理类对目标类对象进行操作  看起来操作这个类,实际控制目标类对象
class ProxyClass : public Interface
{
private:
    RealClass* m_realClass;
public:
    virtual void Request()
    {
        m_realClass = new RealClass();
        m_realClass->Request();
        delete m_realClass;
    }
};

int main()
{
    ProxyClass* test = new ProxyClass();
    test->Request();
    return 0;
}

Guess you like

Origin blog.csdn.net/yun6853992/article/details/119132944