一、UML图
二、包含的角色
Suject类,定义了RealSubject和Proxy的共用接口
RealSubject类,定义了Proxy所代理的真实实体
Proxy类,代理类。
三、特点
定义:代理模式(Proxy)为其他对象提供一种代理,用来控制对这个对象的访问。
应用场合:
(1)远程代理,为一个对象在不同地址空间提供局部代表,这样可以隐藏一个对象存在于不同地址空间的事实。
(2)虚拟代理,根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。
(3)安全代理,用来控制真实对象访问时候的权限
(4)智能指引,调用真实对象时候,代理处理另外的事情。
四、代码实现
Subject类
class Subject {
public:
virtual void Request();
};
RealSubject类
class RealSubject : public Subject {
public:
void Request();
};
#include "RealSubject.h"
#include <iostream>
void RealSubject::Request() {
printf("RealRequst");
}
Proxy类
#include "Suject.h"
#include "RealSubject.h"
class Proxy : public Subject {
public:
void Request();
private:
RealSubject* realSubject;
};
#include "Proxy.h"
void Proxy::Request() {
{
if (realSubject == NULL)
{
realSubject = new RealSubject();
}
realSubject->Request();
}
调用方式
int main()
{
Proxy* proxy = new Proxy();
proxy->Request();
delete proxy;
return 0;
}