C++ 设计模式 - 代理模式
最编程
2024-10-10 16:38:10
...
#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();
}