代理模式
提供一种代理来控制对其他对象的访问
通过一个抽象类提供的一套相同的接口然后通过封装的方式,来实现通过对代理的访问来间接地访问真正的类。
#include <iostream>
using namespace std;
// 通过一种代理来控制对其他对象的访问
class abstractCommonInterface {
public:
virtual void run() = 0;
};
// 已经写好的系统
class MySystem : abstractCommonInterface{
public:
void run() override {
cout << "系统启动" << endl;
}
};
// 不是所有的人都可以启动系统,若要启动系统,则必须输入帐号和密码
class MySystemProxy : public abstractCommonInterface {
public:
MySystemProxy(string username, string password) {
this->mUsername = username;
this->mPassword = password;
pSystem = new MySystem;
}
void run() override {
if (checkUsernameAndPassword()) {
cout << "正确, 系统系统" << endl;
pSystem->run();
} else {
cout << "用户名或密码错误, 无法启动" << endl;
}
}
// 只读函数可以用const来确保这个函数不会修改数据
bool checkUsernameAndPassword() const {
if (mUsername == "root" && mPassword == "root")
return true;
return false;
}
~MySystemProxy() {
delete pSystem;
}
public:
//将系统作为一个成员,对系统做一个封装
MySystem* pSystem = nullptr;
string mUsername;
string mPassword;
};
void test01() {
auto proxy = new MySystemProxy("admin", "admin");
proxy->run();
delete proxy;
proxy = new MySystemProxy("root", "root");
proxy->run();
}
int main() {
test01();
return 0;
}