一、源代码:
#include<iostream>
#include<memory>
using namespace std;
class Image
{
public:
virtual void display() = 0;
virtual ~Image() = default;
};
class RealImage:public Image
{
public:
RealImage(string fileName)
{
this->_fileName = fileName;
loadFromDisk(fileName);
}
virtual void display() override
{
cout<<"Display:"<<_fileName<<endl;
}
private:
string _fileName;
void loadFromDisk(string fileName)
{
cout<<"Loading:"<<fileName<<endl;
}
};
class ProxyImage:public Image
{
public:
ProxyImage(string fileName)
{
this->_fileName = fileName;
}
virtual void display() override
{
if(_realImage == nullptr)
{
_realImage = make_shared<RealImage>(_fileName);
}
_realImage->display();
}
private:
shared_ptr<RealImage> _realImage;
string _fileName;
};
int main()
{
shared_ptr<Image> image = make_shared<ProxyImage>("test_10mb.jpg");
//图像从磁盘加载
image->display();
cout<<endl;
//图像不需要从磁盘加载
image->display();
}
二、运行结果: