代理模式: 为其余对象提供一个代理以管制对这个对象的拜访
应用场景:
- 近程代理
- 虚代理
- 爱护代理
- ...后续补充应用场景
举例
思考一个能够在文档中镶嵌图形对象的文档编辑器,有些图形对象的创立开销很大, 然而打开文档必须很迅速, 因而咱们在打开文档时应该防止一次性创立所有开销很大的对象。这里就能够使用代理模式。在打开文档时候, 并不关上图形对象。而是关上图形对象的代理以代替实在的图形,待到真正须要关上图形时,仍由代理负责关上, 上面给出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;}
在这个例子属于虚代理的状况; 上面给出两个只能援用的例子。