代理模式(Proxy)

2014-11-23 20:19:44 · 作者: · 浏览: 9
代理模式,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。
优点: 代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了保护目标对象的作用。
应用场景:
    远程代理。为一个不同的地址空间的对象提供一个本地的代理对象。这个不同的地址空间可以是在同一台主机中,也可在不同的主机中。虚拟代理。根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。这样可以达到性能的最优化,比如打开一个很大的HTML网页时。安全代理。用来控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候。智能指针。是指当调用真实的对象时,代理处理另外一些事。如计算真实对象的引用计数,这样当该对象没有引用时,可以自动释放它;或当第一次引用一个持久对象时,将它装入内存;或在访问一个实际对象前,检查是否已经锁定它,以确保其他对象不能改变它。他们都是通过代理访问一个对象时附加一些内务处理。 \


    Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。
    代码: //Proxy.h
    #include "stdafx.h"
    #include 
       
        
    #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
    // 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;
    }
    
       
    运行结果: