设计模式-代理模式

简介: 设计模式-代理模式
/*
代理Proxy模式:通过代理类,来控制实际对象的访问权限
客户  助理Proxy 老板
*/
class VideoSite //抽象类
{
public:
  virtual void freeMovie() = 0; //免费电影
  virtual void vipMovie() = 0;  //vip电影
  virtual void ticketMovie() = 0; //用券观看电影
};
class FixBugVideoSite : public VideoSite//委托的类
{
public:
  virtual void freeMovie()  //免费电影
  {
    cout << "观看免费电影" << endl;
  }
  virtual void vipMovie() //vip电影
  {
    cout << "观看vip电影" << endl;
  }
  virtual void ticketMovie()  //用券观看电影
  {
    cout << "用券观看电影" << endl;
  }
};
//代理类 代理FixBufVideoSite
class FreeVideoSiteProxy : public VideoSite
{
public:
  FreeVideoSiteProxy() { pVideo = new FixBugVideoSite(); }
  ~FreeVideoSiteProxy() { delete pVideo; }
  virtual void freeMovie()  //免费电影
  {
    pVideo->freeMovie();//通过代理对象的freeMovie来访问真正委托类对象的freeMovie
  }
  virtual void vipMovie() //vip电影
  {
    cout << "您目前只是普通游客,需要升级成vip,才能观看vip电影" << endl;
  }
  virtual void ticketMovie()  //用券观看电影
  {
    cout << "您目前没有券,需要购买电影券,才能观看电影" << endl;
  }
private:
  VideoSite *pVideo;
};
//代理类 代理FixBufVideoSite
class VipVideoSiteProxy : public VideoSite
{
public:
  VipVideoSiteProxy() { pVideo = new FixBugVideoSite(); }
  ~VipVideoSiteProxy() { delete pVideo; }
  virtual void freeMovie()  //免费电影
  {
    pVideo->freeMovie();//通过代理对象的freeMovie来访问真正委托类对象的freeMovie
  }
  virtual void vipMovie() //vip电影
  {
    pVideo->vipMovie();
  }
  virtual void ticketMovie()  //用券观看电影
  {
    cout << "您目前没有券,需要购买电影券,才能观看电影" << endl;
  }
private:
  VideoSite *pVideo;
};
//这些都是通用的API接口,使用的都是基类的指针或引用
void watchMovice(unique_ptr<VideoSite> &ptr) {
  ptr->freeMovie();
  ptr->vipMovie();
  ptr->ticketMovie();
}
int main()
{
  unique_ptr<VideoSite> p1(new FreeVideoSiteProxy());
  unique_ptr<VideoSite> p2(new VipVideoSiteProxy());
  watchMovice(p1);
  watchMovice(p2);
  return 0;
}
相关文章
|
3月前
|
设计模式 C#
设计模式之代理模式(Proxy)
设计模式之代理模式(Proxy)
|
4月前
|
设计模式 XML JSON
二十三种设计模式全面解析-代理模式进阶篇:揭秘远程代理
二十三种设计模式全面解析-代理模式进阶篇:揭秘远程代理
|
3月前
|
设计模式 数据安全/隐私保护
设计模式之代理模式
设计模式之代理模式
|
4月前
|
设计模式 缓存
二十三种设计模式全面解析-代理模式(Proxy Pattern)详解:探索隐藏于背后的力量
二十三种设计模式全面解析-代理模式(Proxy Pattern)详解:探索隐藏于背后的力量
|
1月前
|
设计模式 JavaScript Java
设计模式——代理模式
一文讲清楚设计模式中的代理模式
23 0
设计模式——代理模式
|
1月前
|
设计模式 Java 数据库连接
【重温设计模式】代理模式及其Java示例
【重温设计模式】代理模式及其Java示例
23 2
|
4天前
|
设计模式 Go 网络安全
[设计模式 Go实现] 结构型~代理模式
[设计模式 Go实现] 结构型~代理模式
|
1月前
|
设计模式 uml
设计模式之代理模式
设计模式之代理模式
|
1月前
|
设计模式 Arthas Java
【设计模式】代理模式
【设计模式】代理模式
|
2月前
|
设计模式 缓存 安全
设计模式-代理模式(静态代理、动态代理、cglib代理)、代理模式和装饰者模式的区别
设计模式-代理模式(静态代理、动态代理、cglib代理)、代理模式和装饰者模式的区别
55 1