代理模式(Proxy)

来源:互联网 发布:录制搞笑视频软件 编辑:程序博客网 时间:2024/06/04 23:20
  代理模式,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。

优点:
代理对象可以在客户端和目标对象之间起到中介的作用,这样起到了保护目标对象的作用。

应用场景:
  1. 远程代理。为一个不同的地址空间的对象提供一个本地的代理对象。这个不同的地址空间可以是在同一台主机中,也可在不同的主机中。
  2. 虚拟代理。根据需要创建开销很大的对象。通过它来存放实例化需要很长时间的真实对象。这样可以达到性能的最优化,比如打开一个很大的HTML网页时。
  3. 安全代理。用来控制真实对象访问时的权限。一般用于对象应该有不同的访问权限的时候。
  4. 智能指针。是指当调用真实的对象时,代理处理另外一些事。如计算真实对象的引用计数,这样当该对象没有引用时,可以自动释放它;或当第一次引用一个持久对象时,将它装入内存;或在访问一个实际对象前,检查是否已经锁定它,以确保其他对象不能改变它。他们都是通过代理访问一个对象时附加一些内务处理。



Subject类,定义了RealSubject和Proxy的共用接口,这样就在任何使用RealSubject的地方都可以使用Proxy。

代码:
//Proxy.h
#include "stdafx.h"#include <iostream>#include <memory>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 <RealSubject > _pRealSubject;public :        virtual void Request()       {               if (_pRealSubject == NULL)                     _pRealSubject = shared_ptr <RealSubject >(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 <Proxy > pProxy( new Proxy());       pProxy->Request();       getchar();        return 0;}
运行结果:

0 0
原创粉丝点击