代理模式介绍

今天继续学习设计模式,今天我们来学习代理模式。其实这个模式呢在我们的生活早已经运用起来了。笔者看到这个模式就联想到了代理商。我们客户买东西一般都是经过代理商的,代理商和真正的生成产品的公司进行对接,因为代理商有钱嘛可以搞垄断赚差价嘛。其实在软件设计中的代理模式和我们现实生活中很类似。在设计模式中,我们的代理模式是这样的,客户端并不能直接访问真正的主题对象,只能通过代理对象进行间接的访问,这样我们就可通过代理对象来控制对真实主题对象的访问,可以在访问前后做一些动作,比如校验什么之类的呀。下面我们看一下标准的代理模式模型图。

代理模式标准模型图

从图中可以,为啥我们的代理对象能代理真实的主题对象 干事呢?很重要一点,他们都继承实现共同的接口。这样在需要访问真实主题对象是都可以使用代理对象 进行访问控制

代理服务器案例

在了解上面代理模式相关知识后,这个代理服务器访问的案例也就不难理解了。访问真正的服务器,需要通过代理服务器,代理服务器进行用户名密码校验,通过才允许访问真实服务器

代理服务器模型图

代理服务器代码

#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++)【代理服务器案例】相关推荐

  1. 趣谈设计模式 | 代理模式(Proxy):利用代理来控制对象的访问

    文章目录 案例:房屋中介 代理模式 代理模式与装饰器模式 代理模式的应用 远程代理 虚拟代理 安全代理 智能引用代理 写时拷贝代理 总结 完整代码与文档 由于代理模式相较于前面的其他设计模式来说更加简 ...

  2. java设计模式代理模式_Java中的代理设计模式

    java设计模式代理模式 代理对象或代理对象为另一个对象提供占位符,以控制对该对象的访问. 代理充当原始对象的轻量级版本或简化版本. 它支持与原始对象相同的操作,但可以将那些请求委托给原始对象以实现它 ...

  3. Android常见设计模式——代理模式(Proxy Pattern)(二)

    文章目录 1. 前言 2. 远程代理(Remote Proxy) 3. 后记 1. 前言 在上篇Android常见设计模式--代理模式(Proxy Pattern)中基本上知道了什么是代理模式,以及对 ...

  4. Python设计模式-代理模式

    Python设计模式-代理模式 基于Python3.5.2,代码如下 #coding:utf-8info_struct = dict() info_struct["addr"] = ...

  5. Java设计模式(代理模式-模板方法模式-命令模式)

    Java设计模式Ⅴ 1.代理模式 1.1 代理模式概述 1.2 静态代理 1.2.1 静态代理概述 1.2.2 代码理解 1.3 动态代理之JDK代理 1.3.1 动态代理之JDK代理概述 1.3.2 ...

  6. 设计模式——代理模式

    设计模式--代理模式 代理(Proxy)是一种设计模式,提供了对目标对象另外的访问方式;即通过代理对象访问目标对象.这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能 ...

  7. 23种设计模式----------代理模式(一)

    代理模式也叫委托模式. 代理模式定义:对其他对象提供一种代理从而控制对这个对象的访问.就是,代理类 代理 被代理类,来执行被代理类里的方法. 一般情况下,代理模式化有三个角色. 1,抽象的主题类(或者 ...

  8. 第四章 Caché 设计模式 代理模式

    文章目录 第四章 Caché 设计模式 代理模式 定义 类型 使用场景 优点 缺点 结构图 完整示例 抽象主题类 真实主题类 代理类 对象类 调用 思考 第四章 Caché 设计模式 代理模式 定义 ...

  9. sheng的学习笔记-设计模式-代理模式

    原理图: 代理模式的定义:由于某些原因需要给某对象提供一个代理以控制对该对象的访问.这时,访问对象不适合或者不能直接引用目标对象,代理对象作为访问对象和目标对象之间的中介. 至少在以下集中情况下可以用 ...

  10. 设计模式-代理模式(Proxy Pattern)

    设计模式-代理模式(Proxy Pattern) 文章目录 设计模式-代理模式(Proxy Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.小结 六.动态代理 ...

最新文章

  1. 79年后,中国人口将不到10亿,我国的生育率为何上不去了?
  2. Ubuntu下的Linux内核的编译及安装
  3. 网络基础之网络模型及各分层的设备
  4. php用魔术方法__call实现类函数重载
  5. 软件_视频rtmp,rmvb,h265区别
  6. InfluxDB源码阅读之httpd服务
  7. NSA 分享植入 web shell 的常用漏洞列表
  8. Python Cookbook(第3版)pdf
  9. 兼容ie\firefox\chrome的cursor
  10. Android短信验证码-使用mob免费版
  11. win10 查看电脑mac 地址和ip
  12. 各类学科入门书籍推荐
  13. Unity shader系列:好用的IDE--JetBrain Rider
  14. 对Python语言课程的建议
  15. mysql dp.cal 显示汉子_JS日历插件 - My97 DatePicker
  16. 静脉炎的症状有哪些?
  17. 使用python爬取12306上面所有车次数据
  18. 下班后我都学了什么 | Python 如何高效的遍历DataFrame?
  19. Houdini中四种实现龙卷风速度场的方法及比较
  20. 10 款优雅的 Go 语言开发工具

热门文章

  1. 1982:【19CSPJ普及组】数字游戏 scratch C++
  2. java workthread_Java多线程基础(十)——Work Thread模式
  3. linux 远程桌面配置,linux 远程桌面的配置
  4. python需要的基础_推荐收藏!小白不要怕!一周学全Python面试基础(2)
  5. GIS笔记-使用Geoserver搭建MWTS服务(构建离线GIS服务)
  6. Qt工作笔记-通过 对象树 或 delete this 释放对象
  7. MySQL入门之select、from、join、where子句及基本匹配符
  8. php cli输出百分比,CLI模式。能不能修改已经输出的内容?
  9. Ubuntu 20.10 安装 fcitx5 输入法
  10. 对比 | Python中超级好用的“列表解析式”、“字典解析式”、“集合解析式”