[设计模式系列] 代理模式

代理模式: 为其他对象提供一个代理以控制对这个对象的访问

使用场景:

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

在这个例子属于虚代理的情况; 下面给出两个只能引用的例子。

你可能感兴趣的:(设计模式)