1. 目的
当不希望客户知道某个接口的具体实现类时,可以使用一个代理类,由代理类去获取实际实现接口的类,然后客户调用的是代理类的接口,然后代理类去调用实际实现类的接口。
2.代码
proxy.h
#ifndef PROXY_H_
#define PROXY_H_
class Interface
{
public:
virtual ~Interface();
virtual void request()=0;
};
class RealSubject:public Interface
{
public:
void request();
};
class Proxy:public Interface
{
public:
Proxy();
void request();
void setSubject(RealSubject&);
private:
RealSubject* real;
};
proxy.cpp
#include "Proxy.h"
#include <iostream>
using namespace std;
Interface::~Interface()
{}
void RealSubject::request()
{
cout<<"Real request "<<endl;
}
Proxy::Proxy():real(NULL)
{}
void Proxy::request()
{
if(real == NULL)
{
real = new RealSubject();
}
real->request();
}
void proxy()
{
Proxy p;
p.request();
}
执行结果:Real request