一、代理模式
代理模式:为其他对象提供一种方式控制这个对象的访问,起到中介的作用。
比如翻墙的代理服务器,用户不能直接去访问服务器(youtube),便通过代理服务器去访问。
再比如浏览器的流量、缓冲服务器等等
例子
在下面的例子中,subject 类提供了 realsubject 和 proxy 的共同接口,用来保持proxy 和 realsubject 的一致,client 通过 proxy 来访问 realsubject
#include <iostream>
#include <string>
using namespace std;
// 公有接口,subject类
class AbstractCommonInterface {
public:
virtual void run() = 0;
};
// realsubject
class MySys : public AbstractCommonInterface {
public:
virtual void run() {
cout << "start...\n";
}
};
// proxy 只让有权限的人去启动
class Proxy : public AbstractCommonInterface {
public:
Proxy(const string& user, const string& psw) :
_usr(user), _psw(psw) {
_psys = new MySys;
}
~Proxy() {
if (_psys != nullptr)
delete _psys;
}
bool check() {
return _usr == "admin" && _psw == "123";
}
virtual void run() {
if (check()) {
cout << "验证通过\n";
_psys->run();
} else {
cout << "没有权限\n";
}
}
private:
string _psw;
string _usr;
MySys* _psys;
};
void test() {
Proxy* p = new Proxy("admin", "123");
p->run();
delete p;
}
int main() {
test();
return 0;
}
三、常见应用