结构型模式: 类和类的组合获取更大的结构。
代理模式(Proxy模式) 结构型模式之一,可以为其他对象提供一种代理以控制对这个对象的访问。 代理是指具有与代理元(被代理的对象)具有相同接口的类,客户端必须通过代理与被代理的目标类交互。 当一个对象不适合或者不能直接引用另一个对象的时候,利用代理对象作为中介完成。 应用: 1、远程代理,一个对象在不同地址空间提供局部代表,WebService调用代理实现远程访问。 2、虚拟代理,对实例化开销很大的对象通过代理存放优化,如HTML的未打开图片框,存储路径和尺寸调用图片打开。 3、安全代理,控制真实对象的访问权限。 4、智能指引,调用真实对象时,代理处理另外一些事(在访问对象时附加一些内务处理)
例子:通过代理去验证用户名和密码,再去调用真正的系统。
#include <iostream>
#include <string>
using namespace std;
class AbstractCommonInterface {
public:
virtual void run() = 0;
};
class MySystem : public AbstractCommonInterface {
public:
virtual void run() {
cout << "System" << endl;
}
};
class MySystemProxy :public AbstractCommonInterface {
public:
MySystemProxy(string usename, string password) {
this->mUsername = usename;
this->mPassword = password;
pSystem = new MySystem;
}
bool checkUsenameAndPassword() {
if (mUsername == "admin"&&mPassword == "admin") {
return true;
}
else return false;
}
virtual void run() {
if (checkUsenameAndPassword()) {
cout << "usename and password are correct" << endl;
pSystem->run();
}
else {
cout << "usename or password is false" << endl;
}
}
~MySystemProxy() {
if (pSystem != nullptr) {
delete pSystem;
}
}
public:
MySystem* pSystem;
string mUsername;
string mPassword;
};
void test01() {
string usename, password;
cout << "please input usename and password" << endl;
cin >> usename >> password;
MySystemProxy* proxy = new MySystemProxy(usename, password);
proxy->run();
}
int main() {
test01();
system("pause");
return 0;
}
|