zoukankan      html  css  js  c++  java
  • 设计模式 --> (9)代理模式

    代理模式

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

      主要解决的问题是:在直接访问对象时带来的问题,比如说:要访问的对象在远程的机器上。在面向对象系统中,有些对象由于某些原因(比如对象创建开销很大,或 者某些操作需要安全控制,或者需要进程外的访问),直接访问会给使用者或者系统结构带来很多麻烦,我们可以在访问此对象时加上一个对此对象的访问层。

      比如说CA不在一个服务器上,A要频繁的调用C,我们可以在A上做一个代理类Proxy,把访问C的工作交给Proxy,这样对于A来说,就好像在直接访问C的对象。在对A的开发中我们可以把注意力完全放在业务的实现上。

      有四种常用的情况:(1)远程代理,(2)虚代理,(3)保护代理,(4)智能引用。

    虚代理

      根据需要创建一个资源消耗较大的对象,使得此对象只在需要时才会被真正创建。是根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。 

    #include <iostream>
    using namespace std;
    
    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() {}  
        void Show() { cout<<"Show big image : "<<m_imageName<<endl; }  
    };  
    
    class BigImageProxy: public Image  
    {  
    private:  
        BigImage *m_bigImage;  
    public:  
        BigImageProxy(string name):Image(name),m_bigImage(0) {}  
        ~BigImageProxy() { delete m_bigImage; }  
        void Show()   
        {  
            if(m_bigImage == NULL)  
                m_bigImage = new BigImage(m_imageName);  
            m_bigImage->Show();  
        }  
    };  
    
    int main()  
    {  
        Image *image = new BigImageProxy("proxy.jpg"); //代理  
        image->Show(); //需要时由代理负责打开  
        delete image;  
        return 0;  
    }  

     参考:http://blog.csdn.net/wuzhekai1985

  • 相关阅读:
    Openjudge-NOI题库-简单算术表达式求值
    洛谷-求同构数的个数-NOIP2013提高组复赛
    洛谷-拼数-NOIP1998提高组复赛
    洛谷-统计数字-NOIP2007提高组复赛
    洛谷-谁拿了最多奖学金-NOIP2005提高组复赛
    Openjudge-NOI题库-字符串移位包含问题
    洛谷-乘积最大-NOIP2000提高组复赛
    NOIP2015-普及组复赛-第一题-金币
    Tyvj-超级书架
    Openjudge-NOI题库-出书最多
  • 原文地址:https://www.cnblogs.com/jeakeven/p/4966874.html
Copyright © 2011-2022 走看看