当前位置: 首页 > news >正文

结构型模式---代理模式

概念

代理模式是一种结构型模式,主要用于在客户端和接口之间添加一个中间层,用于在客户端和接口之间进行权限控制或者其他的中间层操作。

使用场景

1、延缓初始化,当我们偶尔需要使用一个重量级的服务对象,如果一直保持该对象的运行会消耗大量的系统资源,这时候就可以使用代理。也可以控制重量级的对象进行即可销毁。

2、权限访问控制,当我们希望特定的客户端使用接口的时候,就可以使用代理模式。当复合我们的条件的时候再进行真正的接口访问。

3、本地执行远程服务(远程代理),这个时候使用代理进行远程服务的复杂处理。并且可以缓存请求结果。

4、记录日志,当需要在接口和客户端之前进行日志记录的时候可以使用代理模式。

创建方式

1、如果有现成的服务器接口我们可以直接继承服务器接口实现代理类,如果没有现成的服务接口,我们就需要创建一个接口来实现服务对象和代理的可交换性。。

2、创建代理类,其中必须包含一个指向服务接口的引用或者成员变量。一般情况下代理完全管理服务接口的生命周期。

3、根据需求实现代理接口。

类关系结构

在这里插入图片描述

示例代码

#include <iostream>
#include "DaiLiMoShi.h"int main()
{std::cout << "欢迎东哥来到设计模式的世界!\n";Proxy proxy;proxy.setSerivePate("193.101.10.9", 2493);int post = proxy.getSerivePost();cout << "main打印获取服务post数据" << endl;cout << "Post : " << post << endl;
}
#pragma once
#include <string>
#include <iostream>
using namespace std;
class BaseProxyInterFaxe
{
public:BaseProxyInterFaxe() {}~BaseProxyInterFaxe() {}virtual int getSerivePost();virtual void setSerivePate(string ip, int post);
};class ThirdSerice : public BaseProxyInterFaxe {
public:ThirdSerice() {}~ThirdSerice() {}int getSerivePost() override;void setSerivePate(string ip, int post) override;
private:string m_ip;int m_post;
};class Proxy : public BaseProxyInterFaxe {
public:Proxy() {}~Proxy() {}int getSerivePost() override;void setSerivePate(string ip, int post) override;
private:ThirdSerice _thirdSerice;
};
#include "DaiLiMoShi.h"int BaseProxyInterFaxe::getSerivePost()
{return 0;
}void BaseProxyInterFaxe::setSerivePate(string ip, int post)
{ //基类操作
}int Proxy::getSerivePost()
{//此处可以添加数据打印、权限判断等cout << "代理打印获取服务post数据" << endl;cout << "Post : " << _thirdSerice.getSerivePost() << endl;return _thirdSerice.getSerivePost();
}void Proxy::setSerivePate(string ip, int post)
{//此处可以添加数据打印、权限判断等cout << "代理设置服务位置" << endl;cout << "IP : " << ip << endl;cout << "Post : " << post << endl;_thirdSerice.setSerivePate(ip, post);
}int ThirdSerice::getSerivePost()
{return m_post;
}void ThirdSerice::setSerivePate(string ip, int post)
{m_ip = ip;m_post = post;
}
http://www.lryc.cn/news/536200.html

相关文章:

  • Java面向对象一:相关概念
  • CEF132 编译指南 MacOS 篇 - depot_tools 安装与配置 (四)
  • React VS Vue
  • 伺服报警的含义
  • CSS 属性选择器详解与实战示例
  • 基于STM32、HAL库、HS12864(ST7920,并行接口)C语言程序设计
  • Python练习11-20
  • 探索ELK 的魅力
  • 【ROS2综合案例】乌龟跟随
  • 多式联运最优路径算法
  • GPT-SWARM和AgentVerse的拓扑结构和交互机制
  • 信号检测和信道均衡的联系
  • 优化线程池关闭机制以避免无限循环
  • 持久性HTTPVS.非持久性HTTP
  • 自动化UI测试 | 什么是测试驱动开发(TDD)和行为驱动开发(BDD)?有何区别?
  • 在 PyCharm 中接入deepseek的API的各种方法
  • postman登录cookie设置
  • 如何使用ps批量去除固定位置水印
  • AI代理软件行业白皮书
  • 基于图像处理的裂缝检测与特征提取
  • 机器学习·逻辑回归
  • C#上位机--结构
  • hydra.utils.instantiate函数介绍
  • Qt的QTableWidget样式设置
  • Moretl 增量文件采集工具
  • dedecms 开放重定向漏洞(附脚本)(CVE-2024-57241)
  • 深入理解 MyBatis 框架的核心对象:SqlSession
  • ndk 编译opencv(去除libandroid.so mediandk依赖)
  • MySQL索引和其底层数据结构介绍
  • No module named ‘posepile.util‘