上海网站设计知名乐云seo,微信小程序开发哪家好,网站建设jiage,软件开发与项目管理就业前景欢迎来到 破晓的历程的 博客 ⛺️不负时光#xff0c;不负己✈️ 文章目录 引言代理模式的定义代理模式的具体实现 引言
我们经常听到代理服务器「代理服务器是一个中间服务器#xff0c;能够接收客户端的请求#xff0c;并代表客户端向服务器发起请求#xff0c;然后将服… 欢迎来到 破晓的历程的 博客 ⛺️不负时光不负己✈️ 文章目录 引言代理模式的定义代理模式的具体实现 引言
我们经常听到代理服务器「代理服务器是一个中间服务器能够接收客户端的请求并代表客户端向服务器发起请求然后将服务器返回的数据转发给客户端」。其实在C设计模式中也有一种模式叫做——代理模式。
代理模式的定义
代理模式Proxy Pattern是一种结构型设计模式在软件设计中它为其他对象提供了一种代理或占位符以控制对这个对象的访问。代理对象在客户端和目标对象之间起到中介的作用可以隐藏目标对象的实现细节增加额外的功能如访问控制、日志记录、性能监控等或者对目标对象的访问进行优化。
代理模式的具体实现
具体要求有 创建一个接口「抽象类」。 将抽象类的接口在真实类和代理类中具体实现。在代理类中定义一个真实类的指针对象实现多态。 在代理类中对用户的访问请求做权限认证。
以下是一个视频网站的代理模式。
#includeiostream
#includestring
#includestdio.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();
}