目录
一、代理模式
通过一个代理类,来控制对这个对象的访问。
类别 | 描述 |
适用场景 |
|
优点 |
|
缺点 |
|
无代理模式,人人可具备权限
#include <iostream>
using namespace std;
//提供一种代理来控制对其他对象的访问
class AbstraactCommonInterface {
public:
virtual void run() = 0;
};
//我已经写好的系统
class Mysystem {
public:
virtual void run() {
cout << "系统启动..." << endl;
}
};
//必须有权限验证,不是所有人都能来启动我的启动,必须提供用户名和密码
int main() {
//这样不行。是个人都能启动
Mysystem* system = new Mysystem;
system -> run();
return 0;
}
增加代理模式
#include <iostream>
using namespace std;
//提供一种代理来控制对其他对象的访问
class AbstraactCommonInterface {
public:
virtual void run() = 0;
};
//我已经写好的系统
class Mysystem :public AbstraactCommonInterface{
public:
virtual void run() {
cout << "系统启动..." << endl;
}
};
//必须有权限验证,不是所有人都能来启动我的启动,必须提供用户名和密码
class MysystemProxy :public AbstraactCommonInterface {
public:
MysystemProxy(string username,string password) {
this->mUsername = username;
this->mPassword = mPassword;
}
bool checkUsernameAndPassword() {
if (mUsername == "admin"&&mPassword == "admin") {
return true;
}
return false;
}
virtual void run() {
if (checkUsernameAndPassword()) {
cout << "用户名和密码正确,验证通过..." << endl;
this->pSystem->run();
}
else {
cout << "用户名或密码错误,权限不足...." << endl;
}
}
~MysystemProxy() {
if (pSystem != NULL) {
delete pSystem;
}
}
public:
Mysystem* pSystem;
string mUsername;
string mPassword;
};
int main() {
#if 0
//这样不行。是个人都能启动
Mysystem* system = new Mysystem;
sys