proxy这种关系在生活中很常见,就是叫别人帮你去完成你并不方便自己直接完成或者说别人完成优于自己完成的事情。proxy模式就是解决或者说优化程序设计中遇到的类似情况。
其实我看完代理模式后,总是在想,这和adapter差别到底在哪里?先看看两者的UML图:
proxy:
从UML图上,我看到了proxy中有两次继承,但是当作者真正给出代码后,我没看到我想看到的,我只是觉得这段代码好熟悉。这跟Adapter感觉好相似啊。但是后来的学习我明白了,之前我实现的Adapter并不是完善,我会在不久去重新看看的,在这儿我推荐一篇文章,点这儿,该文章中,对区分这些类似的封装模式有一定的帮助。
下面是我实现的代码:
#ifndef _PROXY_H__
#define _PROXY_H__
class subject
{
public:
virtual ~subject();
virtual void request() = 0;
protected:
subject();
};
class concrete_subject:public subject
{
public:
concrete_subject();
~concrete_subject();
void request();
};
class proxy
{
public:
proxy();
proxy(subject *);
~proxy();
void request();
private:
subject * _p_sub;
};
#endif
//proxy.cpp
#include "proxy.h"
#include <iostream>
using namespace std;
subject::subject()
{
}
subject::~subject()
{
}
concrete_subject::concrete_subject()
{
}
concrete_subject::~concrete_subject()
{
}
void concrete_subject::request()
{
cout<<"REQUEST FROM CONCRETE_SUBJECT"<<endl;
}
proxy::proxy()
:_p_sub(0)
{
}
proxy::proxy(subject *p_sub)
:_p_sub(p_sub)
{
}
proxy::~proxy()
{
delete _p_sub;
}
void proxy::request()
{
cout<<"REQUEST FORM PROXY"<<endl;
_p_sub->request();
}
//main.cpp
#include "proxy.h"
int main(int argc,char **argv)
{
subject *p_sub = new concrete_subject();
proxy * p_pro = new proxy(p_sub);
p_pro->request();
return 0;
}