admin管理员组文章数量:1794759
C++设计模式——代理模式
引言
我们经常听到代理服务器「代理服务器是一个中间服务器,能够接收客户端的请求,并代表客户端向服务器发起请求,然后将服务器返回的数据转发给客户端」。其实在C++设计模式中,也有一种模式叫做——代理模式。
代理模式的定义
代理模式(Proxy Pattern)
是一种结构型设计模式,在软件设计中,它为其他对象提供了一种代理或占位符,以控制对这个对象的访问
。代理对象在客户端和目标对象之间起到中介的作用,可以隐藏目标对象的实现细节,增加额外的功能(如访问控制、日志记录、性能监控等),或者对目标对象的访问进行优化。
代理模式的具体实现
具体要求有:
- 创建一个接口「抽象类」。
- 将抽象类的接口在真实类和代理类中具体实现。在代理类中,定义一个真实类的指针对象,实现多态。
- 在代理类中,对用户的访问请求做权限认证。
以下是一个视频网站的代理模式。
代码语言:javascript代码运行次数:0运行复制#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();
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。 原始发表:2024-10-10,如有侵权请联系 cloudcommunity@tencent 删除代理对象客户端设计模式c++本文标签: C设计模式代理模式
版权声明:本文标题:C++设计模式——代理模式 内容由林淑君副主任自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.xiehuijuan.com/baike/1754894935a1707874.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论