代理模式
在代理模式(Proxy Pattern)中,一个类代表另一个类的功能。这种类型的设计模式属于结构型模式。
在代理模式中,我们创建具有现有对象的对象,以便向外界提供功能接口。
#ifndef _PROXY_H_
#define _PROXY_H_
#include<iostream>
class XImage
{
public:
virtual void display() = 0;
};
class realImage :public XImage
{
public:
realImage( std::string name ):imageName(name)
{
load();
}
void load()
{
std::cout << "load spend much time" << std::endl;
}
void display() override
{
std::cout << "real image name is:" << imageName << std::endl;
}
private:
std::string imageName;
};
//延时代理
//因为构造一个realImage很耗时.
//只有正在使用display()的时候才初始化realImage.
//否则只需使用imageProxy即可.
class imageProxy : public XImage
{
public:
imageProxy(std::string name):imageName(name) {}
void display() override
{
if(rImage)
rImage->display();
else
{
rImage = new realImage(imageName);
rImage->display();
}
}
private:
realImage * rImage;
std::string imageName;
};
#endif
int main()
{
XImage * proxy = new imageProxy("dijiang.jpg");
proxy->display();
return 0;
}