这个模式关注类和对象的组合,继承的概念被用来组合接口和定义组合对象获得新功能的方式。通过代理类控制实际对象的访问权限。
#include <iostream>
#include<memory>
using namespace std;
class videoSite
{
public:
virtual void freeMovie() = 0;
virtual void vipMovie() = 0;
virtual void ticketMovie() = 0;
};
class catVideo:public videoSite //委托类
{
public:
virtual void freeMovie()
{
cout << "freeMovie" << endl;
}
virtual void vipMovie()
{
cout << "vipMovie" << endl;
}
virtual void ticketMovie()
{
cout << "ticketMovie" << endl;
}
};
//代理类
class freeVideo:public videoSite
{
public:
freeVideo()
{
p = new catVideo();
}
virtual void freeMovie() {
p->freeMovie();
}
virtual void vipMovie()
{
cout << "qing shengji" << endl;
}
virtual void ticketMovie() { cout << "false" << endl; }
~freeVideo()
{
delete p;
}
private:
videoSite* p;
};
class vipVideo :public videoSite
{
public:
vipVideo()
{
p = new catVideo();
}
virtual void freeMovie() {
p->freeMovie();
}
virtual void vipMovie()
{
p->vipMovie();
}
virtual void ticketMovie() { cout << "false" << endl; }
~vipVideo()
{
delete p;
}
private:
videoSite* p;
};
int main()
{
unique_ptr<videoSite> p1(new freeVideo());
p1->freeMovie();
p1->ticketMovie();
p1->vipMovie();
return 0;
}