代理模式:为其余对象提供一个代理以管制对这个对象的拜访
应用场景:
- 近程代理
- 虚代理
- 爱护代理
- … 后续补充应用场景
举例
思考一个能够在文档中镶嵌图形对象的文档编辑器,有些图形对象的创立开销很大,然而打开文档必须很迅速,因而咱们在打开文档时应该防止一次性创立所有开销很大的对象。这里就能够使用代理模式。在打开文档时候,并不关上图形对象。而是关上图形对象的代理以代替实在的图形,待到真正须要关上图形时,仍由代理负责关上,上面给出 UML 图:
简略实现
class Image{
public:
Image(string name):m_imageName(name){}
virtual ~Image()
virtual void show() {}
protected:
string m_imageName;
};
class BigImage: public Image {
public:
BigImage(string name):Image(name){}
~BigImage(){}
viod show(){cout <<"show big Image:" << m_imageName << endl;}
};
class BigImageProxy:public Image{
private:
BigImage* m_bigImage;
public:
BigImageProxy(string name):Image(name): m_bigImage(nullptr){}
~BigImageProxy(){delete m_bigImage;}
void show()
{if(m_bigImage == nullptr){m_bigImage = new BigImage(m_imageName);
m_bigImage->show() ;}
}
};
int main(){Image * iamge = new BigImageProxy("proxy.jpg");
image->show();
delete image;
return 0;
}
在这个例子属于虚代理的状况;上面给出两个只能援用的例子。