美文网首页设计模式C++实现笔记
Proxy 代理模式(结构型模式)

Proxy 代理模式(结构型模式)

作者: lixin_karl | 来源:发表于2019-02-24 16:31 被阅读0次

介绍

  代理模式为其他对象提供一种代理以控制这个对象的访问,其目的就是为了延迟所代理对象的创建,因为有的对象创建开销十分大,从而影响用户体验,比如:考虑一个可以嵌入图像的文档编辑器,有些图像创建的开销很大,但是打开文档必须迅速,我们可以延迟图像对象的创建。

代理模式的参与者

  • Proxy 保存一个引用,使得代理对象可以访问实体
  • Subject 定义实体和代理的共用接口
  • RealSubject 代理的实体

实现代码

class Graphic{//Subject 定义实体和代理的共用接口
public:
    virtual ~Graphic(){}
    virtual  void Draw() = 0;
    virtual void Save() = 0;
    virtual void Load() = 0;
};

class Image : public Graphic {//RealSubject 代理的实体
public:
    Image(std::string place)
    {
        _place = place;
    }
    void Draw() override
    {
        std::cout<<"Drawing......"<<std::endl;
    }
    void Save() override
    {
        std::cout<<"Saving..... in "<<_place<<std::endl;
    }
    void Load() override
    {
        std::cout<<"Loading.... from "<<_place<<std::endl;
    }
private:
    std::string _place;
};

class ImageProxy : public Graphic {//Proxy 保存一个引用,使得代理对象可以访问实体
public:
    ImageProxy(std::string place)
    {
        image = nullptr;
        _place = place;
    }
    void Draw() override
    {
        if(image == nullptr)
        {
            std::cout<<"new Image in Draw()"<<std::endl;
            image = new Image(_place);
        }
        image->Draw();
    }
    void Save() override
    {
        if(image == nullptr)
        {
            std::cout<<"new Image in Save()"<<std::endl;
            image = new Image(_place);
        }
        image->Save();
    }
    void Load() override
    {
        if(image == nullptr)
        {
            std::cout<<"new Image in Load()"<<std::endl;
            image = new Image(_place);
        }
        image->Load();
    }
private:
    Image *image;
    std::string _place;
};

int main()
{
    ImageProxy *proxy = new ImageProxy("d:/images");
    proxy->Draw();
    proxy->Load();
    proxy->Save();
};

输出

new Image in Draw()
Drawing......
Loading.... from d:/images
Saving..... in d:/images

特点

  • 远程代理可以影藏一个对象存在于不同空间地址的事实
  • 虚拟代理可以进行最优化,例如根据要求创建对象
  • 保护代理,智能引用都允许在访问一个对象时有一些附加的事务处理

参考

《设计模式:可复用面向对象软件的基础》

相关文章

  • Android设计模式——代理模式

    1.代理模式介绍 代理模式(Proxy Pattern),是七大结构型设计模式之一。 2.代理模式的定义 ...

  • 设计模式[8]-代理模式-Proxy Pattern

    1. 代理模式 代理模式(Proxy Pattern)是常用的结构性设计模式,和装饰者模式非常相似,代理类和被代理...

  • 设计模式之代理模式

    Proxy Pattern 代理模式(Proxy Pattern)被称为委托模式,属于结构性设计模式的一种 定义为...

  • 12、结构型模式之代理模式

    在阎宏博士的《JAVA与模式》一书中开头是这样描述代理(Proxy)模式的: 代理模式是对象的结构模式。代理模式给...

  • 《JAVA与模式》之代理模式

    在阎宏博士的《JAVA与模式》一书中开头是这样描述代理(Proxy)模式的: 代理模式是对象的结构模式。代理模式给...

  • 设计模式-代理模式

    代理模式介绍 代理模式(Proxy Pattern)也称为委托模式,是结构型设计模式的一种。在现实生活中用到代理的...

  • 设计模式-代理模式

    1.代理模式的介绍 代理模式(Proxy Pattern)也称为委托模式,是结构型设计模式的一种。在我们生活中代理...

  • 设计模式之代理模式(Proxy Pattern)

    代理模式简介 代理模式(Proxy Pattern)是结构型模式,这种模式为其他对象提供一种代理以控制对这个对象的...

  • 设计模式——代理模式

    在阎宏博士的《JAVA与模式》一书中开头是这样描述代理(Proxy)模式的:代理模式是对象的结构模式。代理模式给某...

  • 代理模式——基础的设计

      代理模式(Proxy Pattern)也称委托模式(Delegate Pattern),是一种结构型设计模式,...

网友评论

    本文标题:Proxy 代理模式(结构型模式)

    本文链接:https://www.haomeiwen.com/subject/mxkbyqtx.html