設計模式_代理模式

代理模式

在代理模式(Proxy Pattern)中,一個類代表另一個類的功能。這種類型的設計模式屬於結構型模式。

在代理模式中,我們創建具有現有對象的對象,以便向外界提供功能接口。


#ifndef _PROXY_H_
#define _PROXY_H_

#include<iostream>
class XImage
{
public:
    virtual void display() = 0;
};

class realImage :public XImage
{
public:
    realImage( std::string name ):imageName(name) 
    {
        load();
    }

    void load()
    {
        std::cout << "load spend much time" << std::endl;
    }

    void display() override
    {
        std::cout << "real image name is:" << imageName << std::endl;
    }

private:
    std::string imageName;

};

//延時代理
//因爲構造一個realImage很耗時.
//只有正在使用display()的時候才初始化realImage.
//否則只需使用imageProxy即可.
class imageProxy : public XImage
{
public:
    imageProxy(std::string name):imageName(name) {}

    void display() override
    {
        if(rImage)
            rImage->display();
        else
        {
            rImage = new realImage(imageName);
            rImage->display();
        }
    }

private:
    realImage * rImage;
    std::string imageName;

};

#endif

int main()
{
    XImage * proxy = new imageProxy("dijiang.jpg");
    proxy->display();
    return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章