优点: 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了保护目标对象的作用。
应用场景:
-
远程代理。为一个不同的地址空间的对象提供一个本地的代理对象。这个不同的地址空间可以是在同一台主机中,也可在不同的主机中。虚拟代理。根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。这样可以达到性能的最优化,比如打开一个很大的HTML网页时。安全代理。用来控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候。智能指针。是指当调用真实的对象时,代理处理另外一些事。如计算真实对象的引用计数,这样当该对象没有引用时,可以自动释放它;或当第一次引用一个持久对象时,将它装入内存;或在访问一个实际对象前,检查是否已经锁定它,以确保其他对象不能改变它。他们都是通过代理访问一个对象时附加一些内务处理。
代码: //Proxy.h
#include "stdafx.h" #include//ProxyMethod.cpp#include using namespace std; class Subject { public : virtual void Request() = 0; }; class RealSubject :public Subject { public : virtual void Request() { cout << "真实的操作:RealSubject" << endl; } }; class Proxy :public Subject { private : shared_ptr _pRealSubject; public : virtual void Request() { if (_pRealSubject == NULL) _pRealSubject = shared_ptr (new RealSubject ); cout << "可以做一些内务处理!" << endl; _pRealSubject->Request(); } };
// ProxyMethod.cpp : Defines the entry point for the console application.
//
#include "stdafx.h"
#include "Proxy.h"
int _tmain (int argc , _TCHAR * argv [])
{
shared_ptr
pProxy( new Proxy());
pProxy->Request();
getchar();
return 0;
}
运行结果: