zoukankan      html  css  js  c++  java
  • 设计模式C++描述----13.代理(Proxy)模式

    一. 举例说明

    我们有时打开一个网站时会发现有这样的现象,网站上的文字都显示出来了,但是上面的图片还没显示,要等一会才能显示。

    这些未打开的图片的位置上,还是会有图片框和一些等待的信息的,这就是代理模式的应用,此时的代理存储了真实图片的路径和尺寸也用来显示一些友好的信息。

    结构图如下:



    代码实现:

    1. //基类  
    2. class BigImage  
    3. {  
    4. public:  
    5.     BigImage(string name): m_imageName(name) {}  
    6.     virtual ~BigImage() {}  
    7.       
    8.     virtual void Show() {}  
    9.   
    10. protected:    
    11.     string m_imageName;  
    12. };  
    13.   
    14. //真实类  
    15. class RealBigImage: public BigImage    
    16. {  
    17. public:  
    18.     RealBigImage(string name):BigImage(name) {}  
    19.     ~RealBigImage() {}  
    20.       
    21.     void Show()  
    22.     {  
    23.         cout<<"Show big image : "<<m_imageName<<endl;  
    24.     }  
    25. };  
    26.   
    27. //代理  
    28. class Proxy: public BigImage    
    29. {  
    30. private:    
    31.     RealBigImage *m_bigImage;  
    32.   
    33. public:    
    34.     Proxy(string name):BigImage(name),m_bigImage(0)  
    35.     {}  
    36.    
    37.     ~Proxy()  
    38.     {  
    39.         delete m_bigImage;  
    40.     }  
    41.       
    42.     void Show()  
    43.     {    
    44.         if(m_bigImage == NULL)  
    45.         {  
    46.             cout<<"please wait ..."<<endl;  
    47.             m_bigImage = new RealBigImage(m_imageName); //代理创建真实对象  
    48.         }  
    49.   
    50.         m_bigImage->Show();    
    51.     }    
    52. };    
    53.   
    54.   
    55. int main()    
    56. {    
    57.     BigImage *image = new Proxy("SomeBigPic.jpg"); //使用代理  
    58.       
    59.     image->Show(); //代理的操作  
    60.       
    61.     delete image;  
    62.       
    63.     return 0;    
    64. }  

    说明:

    BigImage:虚基类,定义了 RealBigImage 和 Proxy 的共用接口,这样就在任何使用 RealBigImage 的地方都可以使用 Proxy。

    RealBigImage:定义Proxy所代表的真实实体。

    Proxy:通过代理访问实体。

    二. 代理模式

    定义:为其他对象提供一种代理以控制对这个对象的访问


    代理模式分为四种情况:(1)远程代理,(2)虚代理,(3)保护代理,(4)智能引用。

    上文介绍的是虚代理,虚代理是当创建开销很大时,通过代理来存放需要很长时间的真实对象。

    代理模式的要点:

    1. 代理模式与真实对象有同样的接口,这样保证在任何使用 RealSubject 的地方都可以使用 Proxy

    2. Proxy 保存一个真实象的引用,这样可以访问 RealSubject 对象。

  • 相关阅读:
    SetThreadAffinityMask设置线程亲缘性
    Delphi 获取北京时间(通过百度和timedate网站)
    delphi 实现微信开发
    翻书的效果:FMX.TSwipeTransitionEffect Animation
    [每日一题] OCP1z0-047 :2013-07-15 drop column
    Delphi获取当前系统时间(使用API函数GetSystemTime)
    Delphi代码中嵌入ASM代码
    Delphi Jpg和Gif转Bmp
    Delphi RichEdit的内容保存为图片
    Delphi 实现任务栏多窗口图标显示
  • 原文地址:https://www.cnblogs.com/any91/p/3248001.html
Copyright © 2011-2022 走看看