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