欢迎您访问 最编程 本站为您分享编程语言代码,编程技术文章!
您现在的位置是: 首页

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(); }