当前位置: 首页 > 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;
}

相关文章:

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

概念 代理模式是一种结构型模式&#xff0c;主要用于在客户端和接口之间添加一个中间层&#xff0c;用于在客户端和接口之间进行权限控制或者其他的中间层操作。 使用场景 1、延缓初始化&#xff0c;当我们偶尔需要使用一个重量级的服务对象&#xff0c;如果一直保持该对象的…...

Java面向对象一:相关概念

面向过程&面向对象 面向过程思想 步骤清晰简单&#xff0c;第一步做什么&#xff0c;第二步做什么… 面对过程适合处理一些较为简单的问题面向对象思想 物以类聚&#xff0c;分类的思维模式&#xff0c;思考问题首先会解决问题需要哪些分类&#xff0c;然后对这些分类进行…...

CEF132 编译指南 MacOS 篇 - depot_tools 安装与配置 (四)

1. 引言 在 CEF132&#xff08;Chromium Embedded Framework&#xff09;的编译过程中&#xff0c;depot_tools 扮演着举足轻重的角色。这套由 Chromium 项目精心打造的脚本和工具集&#xff0c;专门用于获取、管理和更新 Chromium 及其相关项目&#xff08;包括 CEF&#xff…...

React VS Vue

React 和 Vue 是目前最流行的两个前端框架&#xff0c;它们在设计理念、生态系统和开发体验上各有特点。以下是对 React 和 Vue 的全方位对比&#xff1a; 1. 核心设计理念 React 库而非框架&#xff1a;React 是一个用于构建 UI 的库&#xff0c;专注于视图层&#xff0c;其…...

伺服报警的含义

前言&#xff1a; 大家好&#xff0c;我是上位机马工&#xff0c;硕士毕业4年年入40万&#xff0c;目前在一家自动化公司担任软件经理&#xff0c;从事C#上位机软件开发8年以上&#xff01;我们在开发C#的运动控制程序的时候&#xff0c;一个必要的步骤就是设置伺服报警信号的…...

CSS 属性选择器详解与实战示例

CSS 属性选择器是 CSS 中非常强大且灵活的一类选择器&#xff0c;它能够根据 HTML 元素的属性和值来进行精准选中。在实际开发过程中&#xff0c;属性选择器不仅可以提高代码的可维护性&#xff0c;而且能够大大优化页面的样式控制。本文将结合菜鸟教程的示例&#xff0c;从基础…...

基于STM32、HAL库、HS12864(ST7920,并行接口)C语言程序设计

1、hs12864.h头文件: #ifndef __HS12864_H #define __HS12864_H #ifdef __cplusplus extern "C" {#endif #include "stm32l4xx_hal.h" // 控制线定义 - 根据实际硬件修改 #define HS12864_RS_GPIO_PORT GPIOC #define HS12864_RS_PIN GPIO_PI…...

Python练习11-20

题目&#xff1a;古典问题&#xff1a;有一对兔子&#xff0c;从出生后第3个月起每个月都生一对兔子&#xff0c;小兔子长到第三个月后每个月又生一对兔子&#xff0c;假如兔子都不死&#xff0c;问每个月的兔子总数为多少&#xff1f; 题目&#xff1a;判断101-200之间有多少…...

探索ELK 的魅力

在大数据时代&#xff0c;海量日志和数据的收集、存储、处理与可视化分析变得越来越重要。而 ELK 堆栈&#xff0c;由 Elasticsearch、Logstash、Beats 和 Kibana 组成&#xff0c;正是一个强大的开源解决方案&#xff0c;帮助开发者和运维人员高效管理和分析日志数据。本文将详…...

【ROS2综合案例】乌龟跟随

一、前期准备 1.1 安装 1. 首先安装“乌龟跟随”案例的功能包以及依赖项。 安装方式1&#xff08;二进制方式安装&#xff09;&#xff1a; sudo apt-get install ros-humble-turtle-tf2-py ros-humble-tf2-tools ros-humble-tf-transformations 安装方式2&#xff08;克…...

多式联运最优路径算法

多式联运的最优路径优化问题涉及运输成本、时间、碳排放等多目标权衡&#xff0c;需结合运输方式&#xff08;公路、铁路、水路、航空等&#xff09;的协同性&#xff0c;通过算法模型寻找综合最优解。以下是相关研究进展与算法应用的总结&#xff1a; 一、多式联运路径优化的核…...

GPT-SWARM和AgentVerse的拓扑结构和交互机制

GPT-SWARM和AgentVerse的拓扑结构和交互机制 拓扑结构区别 GPT-SWARM:采用图结构,将语言智能体系统描述为可优化的计算图。图中的每个节点代表一个操作,如语言模型推理或工具使用等特定功能,边则描述了操作之间的信息流,代表智能体之间的通信渠道。多个智能体连接形成的复…...

信号检测和信道均衡的联系

1. 系统模型 假设一个通信系统的数学模型如下&#xff1a; 发送信号&#xff1a; s [ s 1 , s 2 , … , s N ] T \mathbf{s} [s_1, s_2, \dots, s_N]^T s[s1​,s2​,…,sN​]T&#xff0c;其中 s i s_i si​ 是发送符号。信道矩阵&#xff1a; H \mathbf{H} H&#xff08;…...

优化线程池关闭机制以避免无限循环

引言 在多线程编程中&#xff0c;正确关闭线程池是一个重要的任务&#xff0c;以确保程序的稳定性和资源的有效利用。本文将探讨一种常见的线程池关闭机制&#xff0c;并提出优化建议&#xff0c;以避免无限循环和资源浪费。 问题描述 在实际开发中&#xff0c;我们经常使用…...

持久性HTTPVS.非持久性HTTP

1. HTTP协议基础 HTTP&#xff08;HyperText Transfer Protocol&#xff09;是Web通信的核心协议&#xff0c;定义了客户端&#xff08;浏览器&#xff09;与服务器之间传输数据的规则。 在HTTP/1.0及之前的版本中&#xff0c;默认使用非持久性连接&#xff0c;而HTTP/1.1及更…...

自动化UI测试 | 什么是测试驱动开发(TDD)和行为驱动开发(BDD)?有何区别?

TDD&#xff08;测试驱动开发&#xff09;和BDD&#xff08;行为驱动开发&#xff09;是两种独特的软件开发技术&#xff0c;它们在测试的内容和方式上有所不同。尽管名称相似&#xff0c;但服务于不同的目的。 什么是TDD&#xff1f; TDD代表测试驱动开发。它是一个过程&…...

在 PyCharm 中接入deepseek的API的各种方法

在 PyCharm 中接入 DeepSeek 的 API&#xff0c;通常需要以下步骤&#xff1a; 1. 获取 DeepSeek API 密钥 首先&#xff0c;确保你已经在 DeepSeek 平台上注册并获取了 API 密钥&#xff08;API Key&#xff09;。如果没有&#xff0c;请访问 DeepSeek 的官方网站注册并申请 …...

postman登录cookie设置

1.设置环境变量&#xff0c; 定义变量存放共享的登录信息 如Cookie 2.登录接口编码test脚本获取cookie信息 let jsessionidCookie pm.cookies.get("JSESSIONID");if (jsessionidCookie) {let cookie "JSESSIONID" jsessionidCookie "; Admin-Tok…...

如何使用ps批量去除固定位置水印

使用 Photoshop 批量去除固定位置的水印&#xff0c;有几种方法可以实现自动化&#xff0c;具体取决于水印的复杂程度和你对 Photoshop 的熟悉程度&#xff1a; 1. 动作&#xff08;Actions&#xff09; 批处理&#xff08;Batch&#xff09;&#xff1a; 这是最常用的方法&…...

AI代理软件行业白皮书

本AI代理软件行业白皮书的前言应涵盖以下核心内容&#xff1a; 行业背景与市场趋势 全球AI代理构建软件市场2023年销售额达3.17亿美元&#xff0c;预计2030年将增至4.77亿美元&#xff08;年复合增长率6.7%&#xff09;&#xff0c;中国市场增长尤为显著。IBM、Microsoft等企业…...

测试微信模版消息推送

进入“开发接口管理”--“公众平台测试账号”&#xff0c;无需申请公众账号、可在测试账号中体验并测试微信公众平台所有高级接口。 获取access_token: 自定义模版消息&#xff1a; 关注测试号&#xff1a;扫二维码关注测试号。 发送模版消息&#xff1a; import requests da…...

TDengine 快速体验(Docker 镜像方式)

简介 TDengine 可以通过安装包、Docker 镜像 及云服务快速体验 TDengine 的功能&#xff0c;本节首先介绍如何通过 Docker 快速体验 TDengine&#xff0c;然后介绍如何在 Docker 环境下体验 TDengine 的写入和查询功能。如果你不熟悉 Docker&#xff0c;请使用 安装包的方式快…...

Cesium1.95中高性能加载1500个点

一、基本方式&#xff1a; 图标使用.png比.svg性能要好 <template><div id"cesiumContainer"></div><div class"toolbar"><button id"resetButton">重新生成点</button><span id"countDisplay&qu…...

系统设计 --- MongoDB亿级数据查询优化策略

系统设计 --- MongoDB亿级数据查询分表策略 背景Solution --- 分表 背景 使用audit log实现Audi Trail功能 Audit Trail范围: 六个月数据量: 每秒5-7条audi log&#xff0c;共计7千万 – 1亿条数据需要实现全文检索按照时间倒序因为license问题&#xff0c;不能使用ELK只能使用…...

如何在看板中有效管理突发紧急任务

在看板中有效管理突发紧急任务需要&#xff1a;设立专门的紧急任务通道、重新调整任务优先级、保持适度的WIP&#xff08;Work-in-Progress&#xff09;弹性、优化任务处理流程、提高团队应对突发情况的敏捷性。其中&#xff0c;设立专门的紧急任务通道尤为重要&#xff0c;这能…...

Python爬虫(一):爬虫伪装

一、网站防爬机制概述 在当今互联网环境中&#xff0c;具有一定规模或盈利性质的网站几乎都实施了各种防爬措施。这些措施主要分为两大类&#xff1a; 身份验证机制&#xff1a;直接将未经授权的爬虫阻挡在外反爬技术体系&#xff1a;通过各种技术手段增加爬虫获取数据的难度…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

Linux --进程控制

本文从以下五个方面来初步认识进程控制&#xff1a; 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程&#xff0c;创建出来的进程就是子进程&#xff0c;原来的进程为父进程。…...

[ACTF2020 新生赛]Include 1(php://filter伪协议)

题目 做法 启动靶机&#xff0c;点进去 点进去 查看URL&#xff0c;有 ?fileflag.php说明存在文件包含&#xff0c;原理是php://filter 协议 当它与包含函数结合时&#xff0c;php://filter流会被当作php文件执行。 用php://filter加编码&#xff0c;能让PHP把文件内容…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...