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

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.lryc.cn/news/463035.html

相关文章:

  • docker 复制文件,清除不再使用数据导出以及导出文件系统
  • 【Vue】Vue3.0(十一)Vue 3.0 中 computed 计算属性概念、使用及示例
  • 【第三版 系统集成项目管理工程师】第17章 法律法规和标准规范
  • 安装 LLM 编程工具 cursor
  • Java链式编程的定义、例子、使用方法、实际应用场景、自动装配构造
  • 用 Git Stash 临时保存修改,轻松切换任务!
  • Android 下通过触发 SIGTRAP 信号实现反调试
  • 【MySQL】 表的增删操作
  • 新生入门季 | 学习生物信息分析,如何解决个人电脑算力不足的问题?
  • 20255 - 中医方剂学 - 考研 - 执业
  • 【Vue.js设计与实现】第三篇第9章:渲染器-简单Diff算法-阅读笔记
  • 服务器软件之Tomcat
  • Flutter包管理(三)
  • CGNS资料
  • 论文阅读(十六):Deep Residual Learning for Image Recognition
  • Dubbo 序列化方式
  • 如何替换OCP节点(二):使用 antman脚本 | OceanBase应用实践
  • 15.JVM垃圾收集算法
  • 软件工程:图书管理系统甘特图
  • 视频的编解码格式
  • 网络资源模板--Android Studio 实现简易新闻App
  • LabVIEW提高开发效率技巧----离线调试
  • 6N137S1取反电路图
  • Nullinux:一款针对Linux操作系统的安全检测工具
  • 学会这 5 个 AI 神器做字体设计,保证让你私单接到爆!
  • 《Vue3 踩坑》expose 和 defineExpose 暴露属性或方法注意事项
  • 10.13论文阅读
  • 六西格玛黑带项目:TBX-02无人机飞行稳定性提升——张驰咨询
  • git clone 国内镜像
  • 【服务器虚拟化】