zoukankan      html  css  js  c++  java
  • 代理模式(C++)

       年过完了,开始上班了,时间过得太快了,感觉过了个假年........

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

      角色分工:Subject:抽象角色,声明对真实对象和代理对象的共同接口;Proxy:代理角色,代理真实对象的访问;RealSubject:真实角色,最终需要引用的对象。

      代理模式主要分为四类:远程代理、虚代理、保护代理、智能引用

      下面笔记,主要记录虚代理,关于远程代理、保护代理、智能引用等,可以查查资料,其核心思想都是跟其定义一样。特别提下,智能引用其实跟可以参考智能指针的实现,采用引用计数,可以参考:http://www.cnblogs.com/huiz/p/8313209.html

      虚代理:可以缓存实体的附加信息,以便延迟对它的访问,直到我们真正需要一个对象的时候才创建它

      例如:在项目中,我们经常需要加载资源,在开机就立即加载所有的资源,会导致一些性能问题,如开机时间太长等,有需要需要在真正需要的时候再去加载resources,我们可以定义代理类,在代理类里面加载真实对象的resources,这样就可以实现延迟加载。具体可以看UML类图:

    再看看代码:

    #include <iostream>
    using namespace std;
    
    class Base //Subject
    {
    public:
        virtual void requestLoader() = 0;
        virtual ~Base(){}
    };
    
    class Control : public Base //RealSubject
    {
    public:
        virtual void requestLoader()
        {
            cout<<"request loader resources."<<endl;
        }
    };
    
    class Proxy : public Base //proxy
    {
    private:
        Control* m_con;
    public:
        Proxy(Control* con):m_con(con){}
        virtual void requestLoader()
        {
            m_con->requestLoader();
        }
        ~Proxy()
        {
            if(NULL != m_con)
            {
                delete m_con;
                m_con = NULL;
            }
        }
    };
    
    
    int main(int argc, char** argv)
    {
        Control* con = new Control;
        Proxy* pr = new Proxy(con);
        pr->requestLoader();
        delete pr;
        pr = NULL;
    
        return 0;
    }

    输出如下:

      以上代码在VC6.0上运行通过,如有问题,还请多多指教,在此先谢过了哈。

      

  • 相关阅读:
    摄影基础知识(二)
    std::bind
    摄影网站汇总
    std::function
    常用路径说明
    摄影基础知识(一)
    JavaScript 箭头函数:适用与不适用场景
    软帝学院:Java实现的5大排序算法
    软帝学院:用Java编写计算器,代码展示!
    windows环境下运行java的脚本
  • 原文地址:https://www.cnblogs.com/huiz/p/8464538.html
Copyright © 2011-2022 走看看