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


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

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


文章目录

引言

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

代理模式的定义

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

代理模式的具体实现

具体要求有:

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

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

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

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

cpp 复制代码
#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();
}
相关推荐
_OP_CHEN11 分钟前
C++进阶:(二)多态的深度解析
开发语言·c++·多态·抽象类·虚函数·多态的底层原理·多态面试题
金色熊族2 小时前
装饰器模式(c++版)
开发语言·c++·设计模式·装饰器模式
Dream it possible!2 小时前
LeetCode 面试经典 150_链表_旋转链表(64_61_C++_中等)
c++·leetcode·链表·面试
西红柿维生素4 小时前
23种设计模式-框架中的使用
java·开发语言·设计模式
CS创新实验室5 小时前
典型算法题解:长度最小的子数组
数据结构·c++·算法·考研408
数据知道5 小时前
Go语言设计模式:桥接模式详解
设计模式·golang·桥接模式
我有一些感想……5 小时前
浅谈 BSGS(Baby-Step Giant-Step 大步小步)算法
c++·算法·数论·离散对数·bsgs
j_xxx404_5 小时前
C++ STL:string类(3)|operations|string类模拟实现|附源码
开发语言·c++
Elias不吃糖7 小时前
Linux 环境适应 Day 1 全面笔记
linux·c++·笔记
无限进步_8 小时前
C语言字符串连接实现详解:掌握自定义strcat函数
c语言·开发语言·c++·后端·算法·visual studio