博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式之- 代理模式(Proxy Pattern)
阅读量:5054 次
发布时间:2019-06-12

本文共 1713 字,大约阅读时间需要 5 分钟。

代理模式

在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
 
C++代码实现:
#include
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感觉更加强调一个类对另一个类的代理使用(原接口不变),功能扩展倒是其次的。

适配器模式则是更改了原始类对外的接口,使之呈现不同的功能。

装饰模式则更加强调装饰的多样性,每个装饰类都能够实现特异的功能,实现了定向多样扩展类功能的作用。

转载于:https://www.cnblogs.com/J1ac/p/9738127.html

你可能感兴趣的文章
ios封装静态库技巧两则
查看>>
Educational Codeforces Round 46 (Rated for Div. 2)
查看>>
Abstract Factory Pattern
查看>>
Cocos2d-x 3.0final 终结者系列教程10-画图节点Node中的Action
查看>>
简单理解kafka---核心概念
查看>>
assert用法
查看>>
ajaxFileUpload.js 上传后返回的数据不正确 -- clwu
查看>>
扒一扒spring,dom4j实现模拟实现读取xml
查看>>
公司培训lesson 1-代码质量
查看>>
JavaScript 仿LightBox内容显示效果
查看>>
python 字符串处理
查看>>
Do it early, do it often, do it automatically (转)
查看>>
Linux curl使用简单介绍
查看>>
CSDN可以直接扣扣登录.....如需查看我的博客去CSDN
查看>>
App弱网测试方式
查看>>
PHP zendstudio framework2配置过程
查看>>
Xor Sum 01字典树 hdu4825
查看>>
数据访问:三大范式
查看>>
Python基础-----random随机模块(验证码)
查看>>
手机端fixed底部跟着窗口动问题
查看>>