这个模式关注类和对象的组合,继承的概念被用来组合接口和定义组合对象获得新功能的方式。通过代理类控制实际对象的访问权限。
#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;
}
这篇博客介绍了一个使用C++实现的模式,该模式利用继承和代理类来组合对象并控制对实际对象(如免费视频、VIP视频)的访问权限。通过代理类,可以限制或扩展特定功能,例如在freeVideo类中,VIP电影功能被替换为'qingshengji',而ticketMovie功能被禁用。
168万+

被折叠的 条评论
为什么被折叠?



