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

文章目录

  • 一、代理模式
  • 二、代码实现
  • 总结


设计模式分为三大类: 创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、建造者模式、原型模式。
结构型模式,共七种:适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式、享元模式。
行为型模式,共十一种:策略模式、模板方法模式、观察者模式、迭代子模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式、解释器模式。


一、代理模式

代理模式是常见的设计模式之一,顾名思义,代理模式就是代理对象具备真实对象的功能,并代替真实对象完成相应操作,并能够在操作执行的前后,对操作进行增强处理。(为真实对象提供代理,然后供其他对象通过代理访问真实对象)

二、代码实现

代码如下(示例):

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()
	{
		cout << "观看VIP电影" << endl;
	}
	virtual void ticketMovie()
	{
		cout << "用券观看电影" << endl;
	}
};

//代理类 代理FixBugVideoSite
class FreeVideoSiteProxy :public VideoSite
{
public:
	FreeVideoSiteProxy()
	{
		pVideo = new FixBugVideoSite();
	}
	~FreeVideoSiteProxy()
	{
		delete pVideo;
	}
	virtual void freeMovie()	//通过代理类对象freeMovie,来访问真正委托类对象的freeMovie方法
	{
		pVideo->freeMovie();
	}
	virtual void vipMovie()
	{
		cout << "你目前只是普通游客,需要升级成VIP,才能观看VIP电影" << endl;
	}
	virtual void ticketMovie()
	{
		cout << "你目前没有券,需要购买电影券,才能观看电影" << endl;
	}
private:
	VideoSite* pVideo;
};

class VipVideoSiteProxy :public VideoSite
{
public:
	VipVideoSiteProxy()
	{
		pVideo = new FixBugVideoSite();
	}
	~VipVideoSiteProxy()
	{
		delete pVideo;
	}
	virtual void freeMovie()	//通过代理类对象freeMovie,来访问真正委托类对象的freeMovie方法
	{
		pVideo->freeMovie();
	}
	virtual void vipMovie()
	{
		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(std::move(p1));
	//watchMovice(std::move(p2));
	watchMovice(p1);
	watchMovice(p2);
	

	return 0;
}


总结

这篇文章主要实现了代理模式

你可能感兴趣的:(c++,代理模式,c++,设计模式)