乐趣区

关于设计模式:设计模式系列-代理模式

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

应用场景:

  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;
}

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

退出移动版