Proxy(代理)-對象結構型模式

1.意圖ios

    爲其它對象提供一種代理以控制對這個對象的訪問。ide

2.別名測試

    Surrogate.優化

3.動機spa

    經過Proxy能夠達到對一個對象的訪問控制。代理

4.適用性指針

  • 遠程代理  爲一個對象在不一樣地址空間提供局部表明。orm

  • 虛代理  根據須要建立開銷很大的對象。對象

  • 保護代理 控制對原始對象的訪問。it

  • 智能指引 取代了指針,它在訪問對象時執行一些附加操做。

5.結構

    

6.代碼實例

     

複製代碼

//Subject.h#include <memory>class Subject
{public:    virtual void Request() = 0;
};class RealSubject : public Subject
{public:    void Request();
};class Proxy : public Subject
{public:
    Proxy();    void Request();private:
    std::shared_ptr<Subject> m_pSubject;
};

複製代碼

複製代碼

//Subject.cpp#include <iostream>#include "Subject.h"void RealSubject::Request()
{
    std::cout<<"RealSubject Request Exectued" << std::endl;
}

Proxy::Proxy()
{
    m_pSubject = std::shared_ptr<Subject>(new RealSubject);
}void Proxy::Request()
{
    m_pSubject->Request();
}

複製代碼

複製代碼

//Client.cpp#include "Subject.h"int main()
{
    std::shared_ptr<Subject> pProxy(new Proxy);
    pProxy->Request();    while(1);
}

複製代碼

7.測試結果

    

8.效果

  • 遠程代理 能夠隱藏一個對象存在於不一樣地址空間的事實。

  • 虛代理    能夠進行最優化,例如根據要求建立對象。

  • 保護代理和智能引用  都容許在訪問一個對象時有一些附加的內務處理。

相關文章
相關標籤/搜索