标签:err new span 客户 代理 bool 更改 ios 代理模式
#include<iostream> using namespace std; //抽象类,抽象的主题类 class AbstractServer { public: virtual void Request() = 0; }; //真正主题类,具体提供服务的类 class RealServer:public AbstractServer { virtual void Request() { cout << "Server start..." << endl; } }; //代理服务器,非真正的服务器,访问真正服务器必须通过代理服务器 class ProxyServer :public AbstractServer { public: ProxyServer(string name, string pwd) { this->name = name; this->pwd = pwd; this->server = new RealServer; } // 和 真正主题类实现共同的接口,对外可以提供一致的接口! void Request() { PreRequest(); if (!CheckUser()) { cout << "Username or password error..." << endl; return; } cout << "Request success..." << endl; this->server->Request(); PostRequest(); } private: //访问服务器前 进行的动作,可以控制对真实主题类的访问 bool CheckUser() { if ("admin" == this->name && "123456" == this->pwd) { return true; } return false; } //真正访问服务器前 进行的动作,这里进行安全 void PreRequest() { cout << "Entering server..." << endl; } //访问服务器之后 进行的动作 void PostRequest() { cout << "Leaving server..." << endl; } string name; string pwd; private: AbstractServer* server; }; //客户端 通过登录代理服务器 访问 真实服务器 int main(int argc, char **argv) { AbstractServer *proxy = new ProxyServer("admin", "123456");//登录代理服务器 proxy->Request();//通过代理服务器 访问真正服务器 return 0; }
类图:
代理模式感觉似曾相识,功能和装饰模式和适配器模式相差不多。
Proxy Pattern感觉更加强调一个类对另一个类的代理使用(原接口不变),功能扩展倒是其次的。
适配器模式则是更改了原始类对外的接口,使之呈现不同的功能。
装饰模式则更加强调装饰的多样性,每个装饰类都能够实现特异的功能,实现了定向多样扩展类功能的作用。
标签:err new span 客户 代理 bool 更改 ios 代理模式
原文地址:https://www.cnblogs.com/J1ac/p/9738127.html