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.效果
遠程代理 能夠隱藏一個對象存在於不一樣地址空間的事實。
虛代理 能夠進行最優化,例如根據要求建立對象。
保護代理和智能引用 都容許在訪問一個對象時有一些附加的內務處理。