设计模式C++实现(8)——代理模式

       简单实现如下:

[cpp]  view plain  copy  print

  1. class Image  
  2. {  
  3. public:  
  4.     Image(string name): m_imageName(name) {}  
  5.     virtual ~Image() {}  
  6.     virtual void Show() {}  
  7. protected:  
  8.     string m_imageName;  
  9. };  
  10. class BigImage: public Image  
  11. {  
  12. public:  
  13.     BigImage(string name):Image(name) {}  
  14.     ~BigImage() {}  
  15.     void Show() { cout<<“Show big image : “<<m_imageName<<endl; }  
  16. };  
  17. class BigImageProxy: public Image  
  18. {  
  19. private:  
  20.     BigImage *m_bigImage;  
  21. public:  
  22.     BigImageProxy(string name):Image(name),m_bigImage(0) {}  
  23.     ~BigImageProxy() { delete m_bigImage; }  
  24.     void Show()   
  25.     {  
  26.         if(m_bigImage == NULL)  
  27.             m_bigImage = new BigImage(m_imageName);  
  28.         m_bigImage->Show();  
  29.     }  
  30. };  

         客户调用:

[cpp]  view plain  copy  print

  1. int main()  
  2. {  
  3.     Image *image = new BigImageProxy(“proxy.jpg”); //代理  
  4.     image->Show(); //需要时由代理负责打开  
  5.     delete image;  
  6.     return 0;  
  7. }  

         在这个例子属于虚代理的情况,下面给两个智能引用的例子。一个是C++中的auto_ptr,另一个是smart_ptr。自己实现了一下。先给出auto_ptr的代码实现:

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2016年11月4日
下一篇 2016年11月5日

相关推荐