推荐文章:http://www.jellythink.com/archives/301
类图:
类解读:
1、Subject:定义了通用的接口
2、Proxy:负责和外部交互的实体类。
3、RealSubject:负责真正干活的实体类,Proxy会将具体的工作交予它。
4、Client:调用proxy部分(不一定是类),他不管活谁完成或怎样完成,他只会寻找Proxy并把任务交予它将其完成。
原理解读:
代理模式主要使用了多态,真正干活的类是被代理的类,而代理类只负责中间衔接工作。就像公司中接货的人是销售,真正干活的人是下边那忙程序员,销售会不会干实际的活,没有关系,只需要让你没有关系,只要客户满意就OK了,你管我怎么干。
#include <iostream>
using namespace std;
#define SAFE_DELETE(p) if (p) { delete p; p = NULL;}
class CSubject
{
public:
CSubject(){};
virtual ~CSubject(){}
virtual void Request() = 0;
};
class CRealSubject : public CSubject
{
public:
CRealSubject(){}
~CRealSubject(){}
void Request()
{
cout<<"CRealSubject Request"<<endl;
}
};
class CProxy : public CSubject
{
public:
CProxy() : m_pRealSubject(NULL){}
~CProxy()
{
SAFE_DELETE(m_pRealSubject);
}
void Request()
{
if (NULL == m_pRealSubject)
{
m_pRealSubject = new CRealSubject();
}
cout<<"CProxy Request"<<endl;
m_pRealSubject->Request();
}
private:
CRealSubject *m_pRealSubject;
};
int main()
{
CSubject *pSubject = new CProxy();
pSubject->Request();
SAFE_DELETE(pSubject);
}