C++设计模式——代理模式

欢迎来到 破晓的历程的 博客

⛺️不负时光,不负己✈️

文章目录

    • 引言
    • 代理模式的定义
    • 代理模式的具体实现

引言

我们经常听到代理服务器「代理服务器是一个中间服务器,能够接收客户端的请求,并代表客户端向服务器发起请求,然后将服务器返回的数据转发给客户端」。其实在C++设计模式中,也有一种模式叫做——代理模式。

代理模式的定义

代理模式(Proxy Pattern)是一种结构型设计模式,在软件设计中,它为其他对象提供了一种代理或占位符,以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介的作用,可以隐藏目标对象的实现细节,增加额外的功能(如访问控制、日志记录、性能监控等),或者对目标对象的访问进行优化。

代理模式的具体实现

具体要求有:

  • 创建一个接口「抽象类」。

  • 将抽象类的接口在真实类和代理类中具体实现。在代理类中,定义一个真实类的指针对象,实现多态。

  • 在代理类中,对用户的访问请求做权限认证。

以下是一个视频网站的代理模式。

#include<iostream>
#include<string>
#include<stdio.h>
using namespace std;
//创建一个抽象类
class VideoSite
{
public:virtual void freeMovie() = 0;virtual void vipMovie() = 0;virtual void ticketMovie() = 0;virtual ~VideoSite() = 0;};
//这是一个真实类  在类中对抽象类的接口做具体的实现。
class FixBugVideoSite:public VideoSite
{
public:void freeMovie(){cout << "观看免费电影" << endl;}void vipMovie(){cout << "观看VIP电影" << endl;}void ticketMovie(){cout << "观看券电影" << endl;}~FixBugVideoSite(){}
};
//这是一个代理类 对免费观看的业务进行代理
class freeMovieAgent :public VideoSite
{
public:~freeMovieAgent(){delete _pVideo;}void freeMovie(){_pVideo->freeMovie();}void vipMovie(){cout << "您当前是普通用户,需要升级VIP,才能观看本部分内容" << endl;}void ticketMovie(){cout << "您需要用券,才能观看本部分内容" << endl;}
private://定义一个指向真实类的指针「实现多态」VideoSite* _pVideo = new FixBugVideoSite();
};
//这是一个代理类 对vip观看的业务进行代理
class vipMovieAgent :public VideoSite
{
public:~vipMovieAgent(){delete _pVideo;}void freeMovie(){_pVideo->freeMovie();}void vipMovie(){_pVideo->ticketMovie();}void ticketMovie(){cout << "您需要用券,才能观看本部分内容" << endl;}
private://定义一个指向真实类的指针「实现多态」VideoSite* _pVideo = new FixBugVideoSite();
};
//这是一个代理类 对券观看的业务进行代理
class ticketMovieAgent :public VideoSite
{
public:~ticketMovieAgent(){delete _pVideo;}void freeMovie(){_pVideo->freeMovie();}void vipMovie(){_pVideo->vipMovie();}void ticketMovie(){_pVideo->ticketMovie();}private://定义一个指向真实类的指针「实现多态」VideoSite* _pVideo = new FixBugVideoSite();
};
int main()
{//客户直接访问代理对象unique_ptr< VideoSite> V1(new freeMovieAgent());V1->freeMovie();V1->vipMovie();
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/56097.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

金蝶云星空与金蝶云星空对接集成采购订单查询连通采购订单新增(采购订单)

金蝶云星空与金蝶云星空对接集成采购订单查询连通采购订单新增(采购订单) 对接系统金蝶云星空 金蝶K/3Cloud在总结百万家客户管理最佳实践的基础上&#xff0c;提供了标准的管理模式&#xff1b;通过标准的业务架构&#xff1a;多会计准则、多币别、多地点、多组织、多税制应用…

git stash命令的使用

工作中&#xff0c;若正在一个分支进行开发&#xff0c;而另一个分支出现bug&#xff0c;这时候&#xff0c;不想commit代码&#xff0c;我们就可以使用git stash将代码暂时存储起来&#xff0c;git stash就相当于一个临时暂存区&#xff0c;这样git status就会发现工作区是干净…

YOLOv10改进策略【注意力机制篇】| 2024 SCSA-CBAM 空间和通道的协同注意模块

一、本文介绍 本文记录的是基于SCSA-CBAM注意力模块的YOLOv10目标检测改进方法研究。现有注意力方法在空间-通道协同方面未充分挖掘其潜力,缺乏对多语义信息的充分利用来引导特征和缓解语义差异。SCSA-CBAM注意力模块构建一个空间-通道协同机制,使空间注意力引导通道注意力增…

HTTP 协议详解

HTTP 协议是 Web 的基石&#xff0c;它定义了客户端和服务器之间的通信规则。本文将深入地探讨 HTTP 的核心概念&#xff0c;包括工作原理、请求方法、状态码以及不同 HTTP 版本的演进。 一、HTTP 的工作原理 HTTP 协议基于客户端-服务器模型&#xff0c;遵循请求-响应的循环&…

opencv学习:CascadeClassifier和detectMultiScale算法进行人脸识别

CascadeClassifier CascadeClassifier 是 OpenCV 提供的一个用于对象检测的类&#xff0c;它基于Haar特征和AdaBoost算法。它能够识别图像中的特定对象&#xff0c;比如人脸、眼睛、微笑等。CascadeClassifier 需要一个预训练的XML分类器文件&#xff0c;该文件包含了用于检测…

Mac 需要杀毒软件?

大部分 mac用户普遍认为 Apple mac 不受病毒和恶意软件的影响。这导致许多 Mac 用户误以为无需为 Mac 安装防病毒软件&#xff0c;但事实并非如此。 在这篇文章中&#xff0c;将深入探讨 Mac 安全性的细节&#xff0c;探索针对 Apple 设备的恶意软件类型&#xff0c;并为您…

Python和CUDA(C++)量子退火和伊辛二次算法模型

&#x1f3af;要点 简化量子退火或离散优化算法处理&#xff0c;使用张量网络模拟和动态系统方法及神经网络逼近。实现并行退火算法和CUDA支持下穷举搜索法。使用大都会算法模拟二维自旋玻璃伊辛模型并测量磁化率、比热容和能量。对比其他组合优化解方法&#xff0c;使用英伟达…

Windows 安装 Maven 并配置环境变量

一、简介 Maven 是一款基于 Java 平台的项目管理和整合工具&#xff0c;用来构建项目的。也就是清理、编译、测试、运行、打包、安装整个过程都交给 Maven 管理&#xff0c;整个过程就是构建。 二、安装 Java JDK Maven 依赖 Java JDK&#xff0c;如果本机没有安装过 Java 的…

C#使用PdfSharp生成PDF文件实例详解

许多项目开发中需要生成PDF, 常规办法使用官方提供的Microsoft.Office.Interop.Worddll插件,但是这种方法需要完全安装OFFICE,另外版本不一致还会出现很多错误。一般不推荐使用。 下面介绍几种巧妙的用法,定能事半功倍。 本文使用PDFsharp完成功能。 PDFsharp一款开源的…

CRM客户关系管理系统的功能、作用、特点有哪些?

大家都知道&#xff0c;CRM是销售常用的客户关系管理系统。销售是客户关系管理系统中的主要组成部分&#xff0c;主要包括潜在客户、客户、联系人、业务机会、订单、回款单、报表统计图等模块。那么CRM只能销售人员用来管理客户关系吗&#xff1f; 其实&#xff0c;CRM的功能远…

HUAWEI_HCIA_实验指南_Lib2.1_交换机基础配置

1、原理概述 交换机之间通过以太网电接口对接时需要协商一些接口参数&#xff0c;比如速率、双工模式等。交换机的全双工是指交换机在发送数据的同时也能够接收数据&#xff0c;两者同时进行。就如平时打电话一样&#xff0c;说话的同时也能够听到对方的声音。而半双工指在同一…

开发日志:IIS安全配置

为了解决IIS文件路径泄漏问题&#xff0c;可以采取以下措施&#xff1a; 一. 详细操作 1. CMD关闭NTFS 8.3文件格式的支持 命令行&#xff1a;fsutil 8dot3name set 1 2. 修改注册表禁用短文件名功能 CMD输入regedit回车&#xff0c;在注册表中找到HKEY_LOCAL_MACHINE\SYSTEM\C…

离职跳槽,不要上了这些当!

在离职跳槽的过程中&#xff0c;许多人可能会遇到各种陷阱和误导&#xff0c;这些不当行为不仅会影响个人的职业发展&#xff0c;还可能带来经济损失和法律风险。以下是一些常见的离职跳槽陷阱及应对策略&#xff0c;帮助你避免上当。 一、离职前的陷阱 1. 盲目冲动离职 现象…

科大讯飞C++开发一面-面经总结

1、内存泄漏和内存溢出的概念&#xff1f; 内存泄漏定义&#xff1a;内存泄漏是指程序在动态分配内存后&#xff0c;失去了对该内存的引用&#xff0c;但该内存并没有被释放。也就是说&#xff0c;程序无法再访问这块内存区域&#xff0c;导致这部分内存被“遗忘”而无法被回收…

uniapp学习(005-1 详解Part.1)

零基础入门uniapp Vue3组合式API版本到咸虾米壁纸项目实战&#xff0c;开发打包微信小程序、抖音小程序、H5、安卓APP客户端等 总时长 23:40:00 共116P 此文章包含第36p-第p40的内容 文章目录 响应式尺寸单位 rpx各种工具修改ui给的图片的宽度ps操作步骤即时设计操作步骤&…

Cherno游戏引擎笔记(61~72)

---------------一些维护和更改------------- 》》》》 Made Win-GenProjects.bat work from every directory 代码更改&#xff1a; echo off->pushd ..\->pushd %~dp0\..\call vendor\bin\premake\premake5.exe vs2019popdPAUSE 为什么要做这样的更改&#xff1f; …

特征点检测与匹配是计算机视觉中的基础任务之一,广泛应用于图像配准、物体识别、运动估计、三维重建等领域。

特征点检测与匹配是计算机视觉中的基础任务之一&#xff0c;广泛应用于图像配准、物体识别、运动估计、三维重建等领域。下面是一些关键的知识点&#xff1a; 1. 特征点检测 特征点检测的目的是从图像中找到独特的、稳定的点&#xff0c;这些点在图像变化&#xff08;如旋转、…

Caffeine+Redis两级缓存架构

CaffeineRedis两级缓存架构 在高性能的服务项目中&#xff0c;我们一般会将一些热点数据存储到 Redis这类缓存中间件中&#xff0c;只有当缓存的访问没有命中时再查询数据库。在提升访问速度的同时&#xff0c;也能降低数据库的压力。 但是在一些场景下单纯使用 Redis 的分布…

Redis登录校验

登录拦截器 第一个拦截器只是确保一切请求都要进行token刷新的大动作 第二个拦截器从ThreadLocal中获取user用户 缓存一致性如何解决 并发情况下发生缓存不一致的问题&#xff0c;主要是因为写数据库和写缓存不是原子的 先写缓存&#xff0c;再写数据库 先写数据库&#xff…

大厂面试真题-微服务有什么缺点

微服务架构在提供诸多优势的同时&#xff0c;也伴随着一些显著的缺点和挑战。以下是对微服务缺点的详细归纳&#xff1a; 一、操作复杂性增加 微服务架构将一个大型应用程序分解为多个小型服务&#xff0c;这导致系统整体的复杂度显著提高。需要管理更多的服务实例、网络通信…