设计模式——代理模式(C++实现)

代理模式简介:

         让一个类代理另一个类去执行另一类的功能,属于结构型设计模式。

     适用场景: 

  1.  远程代理,为一个对象在不同的地址空间提供局部代表。
  2. 虚代理,在创建开销很大的对象的时候。可以让代理对象根据需要在不同的时机创建原始对象。避免同时创建,提高响应速度。
  3. 保护代理,控制对原始对象的访问。
  4. 智能指引,在访问原始对象时可以执行一些附加操作,以丰富原始对象的功能。           

采用菜鸟教程的例子,这里用C++实现

#include<iostream>
#include<string>

using namespace std;

//创建一个图片image基类接口
class image
{
public:
	image() {};
	virtual ~image() {};
	virtual void display()=0;
};

//创建实现image接口的实体类RealImage
class RealImage :public image
{
public:
	RealImage(string tfilename);
	~RealImage() {};
	void display();
	
private:
	string filename;
	void loadFromDisk(string filename);
};

RealImage::RealImage(string tfilename)
{
	this->filename = tfilename;
	loadFromDisk(filename);
}

void RealImage::display()
{
	cout << "RealImage:display: " <<filename<< endl;
}

void RealImage::loadFromDisk(string filename)
{
	cout << "loadFromDisk: " << filename << endl;
}

//创建实现image接口的代理类ProxyImage
class ProxyImage :public image
{
public:
	ProxyImage(string tfilename);
	~ProxyImage();
	void display();

private:
	RealImage *realimage;   //包含image实体类成员变量
	string filename;
};

ProxyImage::ProxyImage(string tfilename)
{
	this->filename = tfilename;
	realimage = NULL;
}
ProxyImage::~ProxyImage()
{
	delete realimage;
	realimage = NULL;
}
void ProxyImage::display()
{
	if (NULL == realimage)
	{
		realimage = new RealImage(filename);
	}
	realimage->display();
}

int main()
{
	image *t1 = (image*)new ProxyImage("test10.jpg");
	t1->display();
	cout << endl;
	t1->display();
	delete t1;
	t1 = NULL;
	system("pause");
	return 0;
}

在visual studio 2015上运行结果:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值