栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

775-C++设计模式 - 代理模式

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

775-C++设计模式 - 代理模式

C++设计模式 - 代理模式

代理模式(结构型模式)
代理Proxy模式 : 通过代理类,来控制实际对象的访问权限
举个例子:客户 助理Proxy 老板(委托类)

代理类和委托类是组合!!!

#include 
#include 
using namespace std;



class VideoSite//#1 抽象类
{
public:
	virtual void freeMovie() = 0;//免费电影
	virtual void vipMovie() = 0;//vip电影
	virtual void ticketMovie() = 0;//用券观看电影
};
//#2 委托类
class FixBugVideoSite : public VideoSite 
{
public:
	virtual void freeMovie()//免费电影
	{
		cout << "观看免费电影" << endl;
	}
	virtual void vipMovie()//vip电影
	{
		cout << "观看VIP电影" << endl;
	}
	virtual void ticketMovie()//用券观看电影
	{
		cout << "用券观看电影" << endl;
	}
};

//第1种代理类
//#3 代理VIP客户类 代理FixBugVideoSite    
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;
};

//第2种代理类
//#3 代理普通客户类  代理FixBugVideoSite  
class FreeVideoSiteProxy : public VideoSite
{
public:
	virtual void freeMovie()//免费电影
	{
		Video.freeMovie();//通过代理对象的freeMovie,来访问真正委托类对象的freeMovie方法
	}
	virtual void vipMovie()//vip电影
	{
		cout << "您目前只是普通游客,需要升级成VIP,才能观看VIP电影" << endl;
	}
	virtual void ticketMovie()//用券观看电影
	{
		cout << "您目前没有券,需要购买电影券,才能观看电影" << endl;
	}
private:
	FixBugVideoSite Video;//# 4 以组合的方式 
};


//这些都是通用的API接口,使用的都是基类的指针或者引用
void watchMovice(unique_ptr &ptr)
{
	ptr->freeMovie();
	ptr->vipMovie();
	ptr->ticketMovie();
}
int main()
{
	unique_ptr p1(new FreeVideoSiteProxy());//#5 客户直接访问代理对象
	unique_ptr p2(new VipVideoSiteProxy());

	watchMovice(p1);
	watchMovice(p2);

	return 0;
}

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/443875.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号