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