代理模式
在代理模式(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;
}