云南微网站建设,学校做好网站建设目的,青岛网站建设效果,大连网络推广机构代理模式是一种结构型设计模式#xff0c;允许一个对象#xff08;代理#xff09;控制另一个对象的访问。代理对象通常充当客户端和实际目标对象之间的中间人#xff0c;从而控制对目标对象的访问#xff0c;可以在访问前后进行一些额外的处理。
代理模式的优点包括允许一个对象代理控制另一个对象的访问。代理对象通常充当客户端和实际目标对象之间的中间人从而控制对目标对象的访问可以在访问前后进行一些额外的处理。
代理模式的优点包括
控制对目标对象的访问代理对象可以控制客户端对目标对象的访问可以在访问前后进行一些额外的处理如权限验证、缓存等。增强目标对象的功能代理对象可以在不修改目标对象的情况下通过代理对象来增强目标对象的功能例如添加日志记录、性能监控等。解耦代理模式可以将客户端与目标对象解耦客户端无需知道目标对象的具体实现只需要与代理对象进行交互。
代理模式的缺点包括
增加了系统复杂度引入了代理对象会增加系统的复杂度增加了额外的代码量。性能开销在某些情况下代理模式可能会引入额外的性能开销特别是动态代理。 #include iostream
#include memory
using namespace std;/*
代理Proxy模式: 通过代理类来控制实际对象的访问权限
客户 助理Proxy 老板 委托类
*/
class VideoSite //1、抽象类
{
public:virtual void freeMovie() 0; //免费电影virtual void vipMovie() 0; //VIP电影virtual void ticketMovie() 0; //用券观看电影
};
class FixBugVideoSite:public VideoSite//2、委托类
{
public:virtual void freeMovie() //免费电影{cout 观看免费电影 endl;}virtual void vipMovie() //VIP电影{cout 观看VIP电影 endl;}virtual void ticketMovie() //用券观看电影{cout 用券观看电影 endl;}
};
//3.代理类
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 充值购买券,才能观看VIP电影 endl;}
private:VideoSite *pVideo;
};
//3.代理类
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 充值购买券,才能观看VIP电影 endl;}
private:VideoSite *pVideo;//4.用组合的方式使用代理对象
};//这些都是通用的API接口使用的都是基类的指针或引用
void watchMovie(unique_ptrVideoSite ptr)
{ptr-freeMovie();ptr-vipMovie();ptr-ticketMovie();
}
int main()
{unique_ptrVideoSite p1(new FreeVideoSiteProxy());//5.客户直接访问代理对象unique_ptrVideoSite p2(new VipVideoSiteProxy());watchMovie(p1);watchMovie(p2);return 0;
}