设计模式:代理模式(C++)【代理服务器案例】
代理模式介绍
今天继续学习设计模式,今天我们来学习代理模式。其实这个模式呢在我们的生活早已经运用起来了。笔者看到这个模式就联想到了代理商。我们客户买东西一般都是经过代理商的,代理商和真正的生成产品的公司进行对接,因为代理商有钱嘛可以搞垄断赚差价嘛。其实在软件设计中的代理模式和我们现实生活中很类似。在设计模式中,我们的代理模式是这样的,客户端并不能直接访问真正的主题对象,只能通过代理对象进行间接的访问,这样我们就可通过代理对象来控制对真实主题对象的访问,可以在访问前后做一些动作,比如校验什么之类的呀。下面我们看一下标准的代理模式模型图。
代理模式标准模型图
从图中可以,为啥我们的代理对象能代理真实的主题对象 干事呢?很重要一点,他们都继承实现共同的接口。这样在需要访问真实主题对象是都可以使用代理对象 进行访问控制。
代理服务器案例
在了解上面代理模式相关知识后,这个代理服务器访问的案例也就不难理解了。访问真正的服务器,需要通过代理服务器,代理服务器进行用户名密码校验,通过才允许访问真实服务器。
代理服务器模型图
代理服务器代码
#define _CRT_SECURE_NO_WARNINGS
#include <iostream>
using namespace std;
//抽象类,抽象的主题类
class AbstractServer
{
public:virtual void Request() = 0;
};
//真正主题类,具体提供服务的类
class RealServer:public AbstractServer
{virtual void Request(){cout << "服务器启动..." << endl;}};
//代理服务器,非真正的服务器,访问真正服务器必须通过代理服务器
class ProxyServer :public AbstractServer
{
public:ProxyServer(string name, string pwd){this->name = name;this->pwd = pwd;this->server = new RealServer;}// 和 真正主题类实现共同的接口,对外可以提供一致的接口!virtual void Request(){if (!CheckUser()){cout << "用户名或者密码错误..." << endl;return;}cout << "请求成功..." << endl;PreRequest();this->server->Request();PostRequest();}
private://访问服务器前 进行的动作,可以控制对真实主题类的访问bool CheckUser(){if ("admin" == this->name && "123456" == this->pwd){return true;}return false;}//真正访问服务器前 进行的动作,这里进行安全void PreRequest(){cout << "进入代理服务器..." << endl;}//访问服务器之后 进行的动作void PostRequest(){cout << "服务器访问完毕..." << endl;}string name;string pwd;
private:AbstractServer* server;
};//客户端 通过登录代理服务器 访问 真实服务器
int main(int argc, char *argv[])
{AbstractServer *proxy = new ProxyServer("admin", "123456");//登录代理服务器proxy->Request();//通过代理服务器 访问真正服务器return EXIT_SUCCESS;
}
运行结果
设计模式:代理模式(C++)【代理服务器案例】相关推荐
- 趣谈设计模式 | 代理模式(Proxy):利用代理来控制对象的访问
文章目录 案例:房屋中介 代理模式 代理模式与装饰器模式 代理模式的应用 远程代理 虚拟代理 安全代理 智能引用代理 写时拷贝代理 总结 完整代码与文档 由于代理模式相较于前面的其他设计模式来说更加简 ...
- java设计模式代理模式_Java中的代理设计模式
java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...
- Android常见设计模式——代理模式(Proxy Pattern)(二)
文章目录 1. 前言 2. 远程代理(Remote Proxy) 3. 后记 1. 前言 在上篇Android常见设计模式--代理模式(Proxy Pattern)中基本上知道了什么是代理模式,以及对 ...
- Python设计模式-代理模式
Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...
- Java设计模式(代理模式-模板方法模式-命令模式)
Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...
- 设计模式——代理模式
设计模式--代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能 ...
- 23种设计模式----------代理模式(一)
代理模式也叫委托模式. 代理模式定义:对其他对象提供一种代理从而控制对这个对象的访问.就是,代理类 代理 被代理类,来执行被代理类里的方法. 一般情况下,代理模式化有三个角色. 1,抽象的主题类(或者 ...
- 第四章 Caché 设计模式 代理模式
文章目录 第四章 Caché 设计模式 代理模式 定义 类型 使用场景 优点 缺点 结构图 完整示例 抽象主题类 真实主题类 代理类 对象类 调用 思考 第四章 Caché 设计模式 代理模式 定义 ...
- sheng的学习笔记-设计模式-代理模式
原理图: 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问.这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介. 至少在以下集中情况下可以用 ...
- 设计模式-代理模式(Proxy Pattern)
设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...
最新文章
- 79年后,中国人口将不到10亿,我国的生育率为何上不去了?
- Ubuntu下的Linux内核的编译及安装
- 网络基础之网络模型及各分层的设备
- php用魔术方法__call实现类函数重载
- 软件_视频rtmp,rmvb,h265区别
- InfluxDB源码阅读之httpd服务
- NSA 分享植入 web shell 的常用漏洞列表
- Python Cookbook(第3版)pdf
- 兼容ie\firefox\chrome的cursor
- Android短信验证码-使用mob免费版
- win10 查看电脑mac 地址和ip
- 各类学科入门书籍推荐
- Unity shader系列:好用的IDE--JetBrain Rider
- 对Python语言课程的建议
- mysql dp.cal 显示汉子_JS日历插件 - My97 DatePicker
- 静脉炎的症状有哪些?
- 使用python爬取12306上面所有车次数据
- 下班后我都学了什么 | Python 如何高效的遍历DataFrame?
- Houdini中四种实现龙卷风速度场的方法及比较
- 10 款优雅的 Go 语言开发工具
热门文章
- 1982:【19CSPJ普及组】数字游戏 scratch C++
- java workthread_Java多线程基础(十)——Work Thread模式
- linux 远程桌面配置,linux 远程桌面的配置
- python需要的基础_推荐收藏!小白不要怕!一周学全Python面试基础(2)
- GIS笔记-使用Geoserver搭建MWTS服务(构建离线GIS服务)
- Qt工作笔记-通过 对象树 或 delete this 释放对象
- MySQL入门之select、from、join、where子句及基本匹配符
- php cli输出百分比,CLI模式。能不能修改已经输出的内容?
- Ubuntu 20.10 安装 fcitx5 输入法
- 对比 | Python中超级好用的“列表解析式”、“字典解析式”、“集合解析式”