zoukankan      html  css  js  c++  java
  • 设计模式--代理模式Proxy(结构型)

    一、代理模式

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

    代理模式分为四种:

    远程代理:为了一个对象在不同的地址空间提供局部代表。这样可以隐藏一个对象存在于不同地址空间的事实。

    虚拟代理:根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的对象。

    安全代理:用来控制真实对象访问时的权限。

    智能指引:当调用目标对象时,代理可以处理其他的一些操作。(智能指针)

    二、UML图

    三、例子

    (1)虚代理

    考虑一个可以在文档中嵌入图形对象的文档编辑器。有些图形对象的创建开销很大。但是打开文档必须很迅速,因此我们在打开文档时应避免一次性创建所有开销很大的对象。这里就可以运用代理模式,在打开文档时,并不打开图形对象,而是打开图形对象的代理以替代真实的图形。待到真正需要打开图形时,仍由代理负责打开。

    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;
    }
  • 相关阅读:
    2020.10.13辗转相除法
    关于……
    友情链接
    李群笔记
    c++中的复数
    python快速傅里叶变换
    多参数函数共轭梯度法寻找极值:gsl_multimin_fdfminimizer
    python: matplotlib.pyplot 制作动图
    简易威尔逊云室计划
    大规模矩阵对角化方法:Lanczos
  • 原文地址:https://www.cnblogs.com/justkong/p/6236118.html
Copyright © 2011-2022 走看看