代理模式: 为其余对象提供一个代理以管制对这个对象的拜访

应用场景:

  1. 近程代理
  2. 虚代理
  3. 爱护代理
  4. ...后续补充应用场景

举例

思考一个能够在文档中镶嵌图形对象的文档编辑器,有些图形对象的创立开销很大, 然而打开文档必须很迅速, 因而咱们在打开文档时应该防止一次性创立所有开销很大的对象。这里就能够使用代理模式。在打开文档时候, 并不关上图形对象。而是关上图形对象的代理以代替实在的图形,待到真正须要关上图形时,仍由代理负责关上, 上面给出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;}

在这个例子属于虚代理的状况; 上面给出两个只能援用的例子。