代理模式(Proxy),为其他对象提供一种代理一控制对这个对象的访问。
//Proxy.h
#ifndef _PROXY_H
#define _PROXY_H
/*Subject定义了ReadSubject和Proxy的公用接口
这也就在任何使用RealSubject的地方都可以使用Proxy*/
class Subject
{
public:
Subject();
virtual ~Subject();
virtual void Request();
};
/*代理所代表的真实实体*/
class RealSubject:public Subject
{
public:
RealSubject();
~RealSubject();
void Request();
};
/*Proxy类,保存一个引用使得代理可以访问实体,
并提供一个与Subject的接口相同的接口,这样代理就可以用来代替实体*/
class Proxy:public Subject
{
public:
Proxy(Subject* subject);
~Proxy();
void Request();
public:
Subject* _sbj;
};
#endif
//Proxy.cpp
#include "Proxy.h"
#include <iostream>
using namespace std;
Subject::Subject()
{
}
Subject::~Subject()
{
}
void Subject::Request()
{
}
RealSubject::RealSubject()
{
}
RealSubject::~RealSubject()
{
}
void RealSubject::Request()
{
cout<<"real request"<<endl;
}
Proxy::Proxy(Subject* subject)
{
_sbj = subject;
}
Proxy::~Proxy()
{
if (!_sbj)
{
delete _sbj;
}
}
void Proxy::Request()
{
cout<<"Proxy request for test"<<endl;
_sbj->Request();
}
//main.cpp
#include "Proxy.h"
#include <iostream>
using namespace std;
int main()
{
Subject* sub = new RealSubject();
Proxy* pxy = new Proxy(sub);
pxy->Request();
return 0;
}